GPSS Patent Search MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@GPSS Patent Search MCPsearch for patents with 'blockchain' in title and year 2023"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
GPSS Patent Search MCP
AI-ready MCP (Model Context Protocol) server for searching patents in the Global Patent Search System (GPSS).
Core Features
Flexible search across GPSS fields using keywords and boolean operators
Returns raw GPSS XML responses (parsed when available)
Code-first schemas (Pydantic) and autogenerated documentation (MkDocs)
Works locally or in Docker
Related MCP server: patents-mcp
Quick Start
Requirements: Python 3.12+ (Docker optional)
Set credentials (example):
export USER_CODE=your_api_code_here
# or add to .envRun locally (stdio transport):
uv run --env-file=.env fastmcp run mcp_tools/main.pyRun the included example client:
uv run --env-file=.env scripts/example.pyDocker
Build the image locally (or use ./scripts/build_image.sh to build+push):
# build locally
docker build -t mcp-tw-gpss:latest .
# or use the helper (this script also tags and pushes if configured)
./scripts/build_image.shRun the container using stdio (the image default CMD runs the MCP with stdio transport):
docker run -i --rm \
-e USER_CODE=your_api_code_here \
mcp-tw-gpss:latestIf you prefer the HTTP transport expose port 8000 and override the container command:
docker run -d --rm -p 8000:8000 \
-e USER_CODE=your_api_code_here \
mcp-tw-gpss:latest \
uv run fastmcp run mcp_tools/main.py --transport httpVS Code MCP client example (stdio via docker):
Add to .vscode/settings.json or your MCP client config:
{
"servers": {
"tw-gpss": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"-e",
"USER_CODE=YOUR_USER_CODE",
"--rm",
"hsiangjenli/mcp-tw-gpss:latest"
]
}
},
}Tools
search_patents— search patents with filters (keywords, fields, databases, date range, etc.)get_available_databases— list supported database codesget_search_examples— example payloads to use as templates
Docs & Details
Field mappings and full schema descriptions are authored in code (mcp_tools/schemas.py and FIELD_ALIAS_MAP in mcp_tools/main.py) and published to the site by MkDocs. To regenerate the docs locally:
chmod +x scripts/build_docs.sh
./scripts/build_docs.sh
uv run mkdocs serve
# then open http://127.0.0.1:8000Reference
GPSS API Documentation: https://tiponet.tipo.gov.tw/gpss1/gpsskm/API/API_instructions.pdf
MCP Protocol: https://modelcontextprotocol.io
FastAPI: https://fastapi.tiangolo.com
Pydantic: https://docs.pydantic.dev
Available Tools
3 toolstool_get_databases_tools_get_available_databases_postC
MCP Tool endpoint for getting available databases.
Responses:
200 (Success): Successful Response
Content-Type:
application/jsonResponse Properties:
databases: Mapping of region -> database code -> description. Each database entry is a human-friendly description derived from the
PatDBenum.
Example:
{
"success": true,
"databases": {
"key": "value"
}
}| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| success | Yes | |
| databases | Yes | Mapping of region -> database code -> description. Each database entry is a human-friendly description derived from the `PatDB` enum. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. 'Getting' weakly implies a read-only, side-effect-free operation, but it says nothing about auth requirements, caching, rate limits, or whether results are static. Almost all text is spent restating the response shape rather than behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The sentence of actual purpose is front-loaded, but the bulk of the description is a verbose response-schema dump (status codes, content types, sample JSON) that is redundant given the output schema exists. Much of the text does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter read tool with an output schema, the core operation is understandable, but the description omits any usage framing or behavioral notes and instead duplicates return-value structure that the output schema already covers. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. There is nothing to document, and the description correctly avoids inventing parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource: 'getting available databases'. An agent can tell it retrieves the list of databases, distinct from the sibling search_patents/get_search_examples tools. It does not explicitly name or differentiate from those siblings, and the 'MCP Tool endpoint' phrasing is meta noise rather than added meaning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no indication of when to use this tool versus alternatives, nor any precondition (e.g. 'call this first to discover valid database codes before searching patents'). Usage must be entirely inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_get_examples_tools_get_search_examples_postC
MCP Tool endpoint for getting search examples.
Responses:
200 (Success): Successful Response
Content-Type:
application/jsonResponse Properties:
Example:
{
"success": true,
"examples": {
"key": "value"
}
}| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| success | Yes | |
| examples | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it does not meet it. It only restates the HTTP success envelope, saying nothing about whether the examples are static, user-specific, or whether the call has side effects or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first line is front-loaded, but the bulk of the text is generated response-schema boilerplate that duplicates structured data already present in the output schema. Roughly half the content does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because an output schema exists, the description need not explain return values, yet it spends its length doing exactly that while omitting what an agent actually needs: what the examples demonstrate and when to consult them. Adequate but with clear gaps for a zero-param discovery tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case; there is nothing for the description to disambiguate beyond what the empty schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb+resource ('getting search examples'), so an agent can tell it is a read of example queries. However, it never says what the examples are for or how they relate to the sibling search_patents tool, and the prefix 'MCP Tool endpoint for' is filler rather than specification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all: no mention of calling this before search_patents to learn query syntax, no prerequisites, and no exclusions. The agent is left to infer the tool's role purely from its name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_search_patents_tools_search_patents_postB
MCP Tool endpoint for patent search.
This tool searches the GPSS (Global Patent Search System) for patents matching your keywords. Authentication is handled automatically via the USER_CODE environment variable.
Simply provide your search keywords and optional filters. The tool will:
Automatically read USER_CODE from the environment
Send the request to GPSS API
Return parsed results with patent numbers, titles, abstracts, and inventor info
Responses:
200 (Success): Successful Response
Content-Type:
application/jsonResponse Properties:
Example:
{
"success": true,
"data": "unknown_type",
"request_params": "unknown_type"
}422: Validation Error
Content-Type:
application/jsonResponse Properties:
Example:
{
"detail": [
"unknown_type"
]
}| Name | Required | Description | Default |
|---|---|---|---|
| keywords | Yes | Keyword expression understood by GPSS (e.g., '雲端 AND 轉型') | |
| databases | No | Optional list of GPSS database codes (patDB) | |
| max_results | No | Maximum number of results to request from GPSS | |
| patent_types | No | Optional list of GPSS patent type codes (patTY) | |
| search_field | No | Which GPSS field group(s) to search. Provide a single value or a list to reuse the same keywords across multiple fields (additional fields are combined with OR per GPSS API rules). Supported values include single fields such as: title, abstract, claims, patent_number, publication_date, application_number, application_date, applicant_name, first_applicant_name, applicant_country, first_applicant_country, inventor_name, inventor_country, agent_name, examiner, priority, priority_date, ipc, first_ipc, cpc, first_cpc, loc, fi, f_term, d_term, uspc, and cited_patents. | title |
| application_types | No | Optional list of GPSS application type codes (patAG) | |
| publication_date_to | No | Upper bound for publication date (YYYYMMDD) | |
| publication_date_from | No | Lower bound for publication date (YYYYMMDD) |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | No | |
| error | No | |
| success | Yes | |
| request_params | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses that authentication is automatic via the USER_CODE environment variable and lists the step sequence (read env, call GPSS, parse results), plus the 200/422 response codes. It omits rate limits, pagination behavior, and what happens if USER_CODE is unset.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening two paragraphs are tight and front-loaded, but the bulk of the description is an auto-generated response block whose examples are placeholder junk ('data': 'unknown_type'), adding length without value since an output schema already exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A full output schema covers return values and the description explains the auth flow, so the core is covered. But for an 8-parameter search tool it lacks guidance on discovering valid database/patent-type codes via the sibling tools and says nothing about result volume or failure modes beyond 422.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description only says 'keywords and optional filters' and adds nothing about search_field semantics, date formats, or how multiple search_fields are OR-combined beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'searches the GPSS (Global Patent Search System) for patents matching your keywords.' An agent can tell what the tool returns (patent numbers, titles, abstracts, inventor info). However, it never names the sibling tools (get_available_databases, get_search_examples) or explains how it differs from them, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Simply provide your search keywords and optional filters' implies the basic call pattern, but there is no when-to-use vs. when-not guidance and no mention that database/type codes should come from the sibling lookup tools. Usage is implied rather than explicitly scoped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v1.0.3- First observed
tool_get_databases_tools_get_available_databases_post - First observed
tool_get_examples_tools_get_search_examples_post - First observed
tool_search_patents_tools_search_patents_post
TDQS
Scored across 3 tools
The three tools serve clearly distinct purposes: searching patents, listing available databases, and retrieving search examples. There is no meaningful overlap in intent, so an agent can select the correct tool without confusion.
All three names follow the same (verbatim auto-generated) pattern of 'tool_x_tools_x_post', so the convention is technically consistent. However, the redundant, verbose, and double-encoded structure is awkward and hard to read, making names less predictable than a clean verb_noun scheme.
Three tools—one core search plus two metadata helpers—is slightly thin but well-scoped for a focused patent search server. Nothing extraneous is present.
The core search, database listing, and example retrieval are covered, but there is no tool to fetch full details for a specific patent number and no apparent support for citation, family, or document retrieval. These are notable gaps for a patent-search domain.
Maintenance
Related MCP Connectors
台灣繁中:一個 MCP 端點串接 19 個台灣資料站工具,並可搜尋 MCP 伺服器與 x402 付費 API。
Taiwan Government Procurement MCP — 政府電子採購網 (PCC) tenders (keyless).
Read-only MCP server for searching Japan government procurement bid information from the KKJ portal.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMCP server for USPTO patent prior-art search, enabling keyword search, ranking, and date filtering via Claude, Cursor, or Windsurf.-
- AlicenseAqualityCmaintenanceMCP server for patent search and prior art discovery powered by Google Patents public dataset on BigQuery. Supports searching patents, fetching full patent details with CPC codes and citations, and retrieving legal claims text.36MIT
- AlicenseAqualityBmaintenanceMCP server that enables searching Korean patents, trademarks, and designs via KIPRIS Plus open APIs. Supports keyword, advanced, applicant, and rightholder searches with detailed bibliographic lookup.750 npm54MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server for patent research and enterprise architecture pattern extraction.MIT