Palisade is an AI-native patent search engine that performs semantic retrieval over patent claims. It ingests public patent data, builds a vector index, and exposes both a web UI and an MCP server so AI clients can search patents directly.
- AI-native patent search for semantic similarity across claims.
- End-to-end pipeline from raw patent XML to searchable embeddings.
- Multiple interfaces: web app, JSON API, and MCP server for AI clients.
Palisade is organized into five main layers:
-
Ingestion
- Parses USPTO patent XML and extracts claims, metadata, and specification text.
-
Indexing
- Generates claim embeddings with OpenAI.
- Stores claims and metadata in Postgres.
- Builds an HNSW index for fast similarity search.
-
Retrieval
- Runs semantic search with filters (applicant, title, dates, claim length).
- Returns ranked matches with similarity scores.
-
API
- Flask app serving the web UI and JSON endpoints.
- Primary search endpoint:
POST /api/patents/semantic-claims-search.
-
MCP Server
- Exposes the
semantic_claims_searchtool over MCP. - Designed for AI clients such as ChatGPT and Claude.
- Exposes the
- Python 3.12
- Postgres 14+
- OpenAI API key (for embeddings)
python -m venv .venv
source .venv/bin/activate
pip install -r patent_search/requirements.txtSet your database and API keys (via .env or environment variables):
PATENTS_DATABASE_URL(orPATENTS_DB_NAME,PATENTS_DB_USER,PATENTS_DB_PASSWORD,PATENTS_DB_HOST,PATENTS_DB_PORT)OPENAI_API_KEY- Optional S3 settings:
PATENT_S3_BUCKET,AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_DEFAULT_REGION
python app.pyThe app runs on http://localhost:5001.
- Download USPTO bulk patent XML data.
- Run ingestion:
python patent_search/extractor/run_extraction.py dir /path/to/uspto/xmlOr for a single file:
python patent_search/extractor/run_extraction.py single /path/to/file.xmlThis step parses patents, embeds claims, and stores them in Postgres.
Start the MCP server locally:
python mcp_server/mcp_server.pyDefault host: 0.0.0.0 and port: 8000.
Build and run the MCP server with Docker Compose:
docker compose -f mcp_server/docker-compose.yml up --buildThe Dockerfile lives at mcp_server/Dockerfile.
- Name:
semantic_claims_search - Required:
query - Optional:
limit,min_similarity,applicant,title,grant_number,application_number,application_date_from,application_date_to,grant_date_from,grant_date_to,min_words,max_words,min_elements,max_elements,ef_search
Add an MCP server in your AI client using either:
- Your hosted URL (example:
https://api.palisadeinnovation.com) - Or a local URL like
http://localhost:8000
This project is licensed under Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0).
See LICENSE for details.