Running patent-client-agents as a stdio MCP server¶
The [mcp] extra ships a ready-to-run stdio MCP server that exposes
all patent and IP tools to any MCP-speaking client — Claude Code,
Claude Desktop, Cursor, Cline, CoWork, or a homegrown fastmcp Client.
Install¶
This installs the runtime (fastmcp, starlette) and adds the
patent-client-agents-mcp console script.
Run¶
patent-client-agents-mcp is a thin wrapper around patent_client_agents.mcp.server:mcp that
runs via fastmcp. You can also invoke it directly:
Claude Code configuration¶
Add one of the following blocks to your MCP config (.mcp.json at the
project root or ~/.claude.json for user-scope):
If you prefer to invoke a specific venv or Python interpreter:
{
"mcpServers": {
"patent-client-agents": {
"command": "/path/to/.venv/bin/patent-client-agents-mcp",
"env": {
"USPTO_ODP_API_KEY": "…",
"EPO_OPS_API_KEY": "…",
"EPO_OPS_API_SECRET": "…"
}
}
}
}
The server starts with no authentication in stdio mode. Any env vars
set in the env block are available to the connectors — USPTO ODP,
EPO OPS, and JPO all consume credentials from env (see each connector's
CATALOG.md entry).
Tools exposed¶
The server mounts ip_mcp, which composes 7 sub-servers:
| Sub-server | Tools | Prefixes on signed-URL downloads |
|---|---|---|
Patents (Google Patents) |
9 | patents/ |
USPTO (ODP — applications, PTAB, petitions, bulk) |
25 | uspto/applications/, ptab/documents/ |
Publications (PPUBS) |
4 | publications/ |
International (EPO OPS, CPC) |
12 | epo/patents/ |
OfficeActions (USPTO OA rejections/citations/text) |
4 | — |
PatentAssignments (USPTO Assignment Center) |
7 | — |
MPEP |
2 | — |
| Total | 63 |
Downloadable artifacts mint HMAC-signed URLs when
LAW_TOOLS_CORE_PUBLIC_URL is set (remote HTTP deployment). In stdio
mode the tools write the bytes to a tempfile and return file_path.
Verifying¶
A one-off smoke test against the running server:
import asyncio
from fastmcp import Client
from fastmcp.client.transports import StdioTransport
async def main():
async with Client(StdioTransport(command="patent-client-agents-mcp", args=[])) as c:
tools = await c.list_tools()
print(len(tools), "tools")
result = await c.call_tool("get_mpep_section", {"section": "2106"})
print(result.data.get("title") if result.data else None)
asyncio.run(main())
Expect 63 tools and the title 2106 … Patent Subject Matter Eligibility.
Not installed?¶
If patent-client-agents-mcp is on PATH but startup fails with
ModuleNotFoundError: No module named 'fastmcp', you installed
patent-client-agents without the [mcp] extra. Re-install with
pip install 'patent-client-agents[mcp]'.