Skip to content

Configuration Reference

IPKit is configured entirely through environment variables. In local development, set them in a .env file. In production (Fly.io), set them via fly secrets set. In Claude Desktop, use the env field in the MCP server config.

VariableTypeDefaultDescription
TRANSPORTstdio | http | chatgptstdioServer transport mode. stdio for Claude Desktop, http for hosted/self-hosted, chatgpt for ChatGPT Apps SDK.
HTTP_PORTnumber3000Port for HTTP transport
HTTP_HOSTstring127.0.0.1Bind address for HTTP transport
CHATGPT_PORTnumber8787Port for ChatGPT SSE transport
CHATGPT_HOSTstring0.0.0.0Bind address for ChatGPT transport
VariableTypeDefaultDescription
API_KEYSstring(empty)Comma-separated list of valid API keys for HTTP/ChatGPT transport. When empty, authentication is disabled.
API_KEYS_CONFIGstring(none)Path to a JSON file with per-key configuration (labels, quotas, tiers). Takes precedence over API_KEYS for key-level settings.
ADMIN_API_KEYstring(none)Admin API key for the GET /keys management endpoint. Must be set separately from API_KEYS.
VariableTypeDefaultDescription
USPTO_API_KEYstring(none)API key from the USPTO developer portal
VariableTypeDefaultDescription
EUIPO_CLIENT_IDstring(none)OAuth2 client ID for the EUIPO API
EUIPO_CLIENT_SECRETstring(none)OAuth2 client secret for the EUIPO API
EUIPO_SANDBOX_CLIENT_IDstring(none)Sandbox OAuth2 client ID (for testing)
EUIPO_SANDBOX_CLIENT_SECRETstring(none)Sandbox OAuth2 client secret (for testing)
VariableTypeDefaultDescription
IPAUSTRALIA_CLIENT_IDstring(none)OAuth2 client ID for IP Australia APIs
IPAUSTRALIA_CLIENT_SECRETstring(none)OAuth2 client secret for IP Australia APIs
VariableTypeDefaultDescription
IPONZ_API_KEYstring(none)API key for the IPONZ API
VariableTypeDefaultDescription
EPO_CONSUMER_KEYstring(none)OAuth2 consumer key for EPO Open Patent Services
EPO_CONSUMER_SECRETstring(none)OAuth2 consumer secret for EPO Open Patent Services

Each provider can be individually enabled or disabled. All providers are enabled by default. Set to false to disable.

VariableTypeDefaultDescription
ENABLE_USPTObooleantrueEnable/disable USPTO provider
ENABLE_EUIPObooleantrueEnable/disable EUIPO provider
ENABLE_IPAUSTRALIAbooleantrueEnable/disable IP Australia provider
ENABLE_IPONZbooleantrueEnable/disable IPONZ provider
ENABLE_WIPObooleantrueEnable/disable WIPO provider
ENABLE_UKIPObooleantrueEnable/disable UKIPO provider
ENABLE_CIPObooleantrueEnable/disable CIPO provider
ENABLE_JPObooleantrueEnable/disable JPO provider
ENABLE_CNIPAbooleantrueEnable/disable CNIPA provider
ENABLE_EPObooleantrueEnable/disable EPO provider
VariableTypeDefaultDescription
EUIPO_SANDBOXbooleanfalseUse the EUIPO sandbox environment instead of production. Requires sandbox credentials.
IPAUSTRALIA_TEST_ENVbooleanfalseUse the IP Australia test environment instead of production

Per-provider rate limits in requests per minute. These are self-imposed limits to avoid overwhelming upstream APIs.

VariableTypeDefaultDescription
USPTO_RATE_LIMITnumber60USPTO requests per minute
EUIPO_RATE_LIMITnumber60EUIPO requests per minute
IPAUSTRALIA_RATE_LIMITnumber500IP Australia requests per minute (shared across trademarks, designs, and patents)
IPONZ_RATE_LIMITnumber60IPONZ requests per minute
WIPO_RATE_LIMITnumber30WIPO requests per minute
UKIPO_RATE_LIMITnumber30UKIPO requests per minute
CIPO_RATE_LIMITnumber30CIPO requests per minute
JPO_RATE_LIMITnumber30JPO requests per minute
CNIPA_RATE_LIMITnumber30CNIPA requests per minute
EPO_RATE_LIMITnumber30EPO requests per minute
VariableTypeDefaultDescription
EUIPO_FETCH_TIMEOUT_MSnumber15000EUIPO request timeout in milliseconds (min: 1000, max: 120000)
IPAUSTRALIA_FETCH_TIMEOUT_MSnumber15000IP Australia request timeout in milliseconds (min: 1000, max: 120000)
DEFAULT_FETCH_TIMEOUT_MSnumber15000Default timeout for providers without a dedicated timeout setting (min: 1000, max: 120000)
VariableTypeDefaultDescription
USPTO_BASE_URLstringhttps://tsdrapi.uspto.govBase URL for the USPTO TSDR API
USPTO_ODP_BASE_URLstringhttps://api.uspto.gov/api/v1Base URL for the USPTO Open Data Portal API
USPTO_USE_ODPbooleanfalseUse the USPTO Open Data Portal instead of the legacy TSDR API
VariableTypeDefaultDescription
CACHE_TTL_SEARCHnumber300Time-to-live for search result caches in seconds (5 minutes)
CACHE_TTL_STATUSnumber3600Time-to-live for status lookup caches in seconds (1 hour)
CACHE_TTL_CLASSnumber86400Time-to-live for Nice class and G&S caches in seconds (24 hours)
CACHE_DIRstring(none)Directory for persistent file-based cache. When unset, IPKit uses in-memory caching (volatile).
VariableTypeDefaultDescription
DATA_DIRstring(none)Directory for persistent data storage (watches, events, webhooks). Falls back to CACHE_DIR, then .trademark-data/.
VariableTypeDefaultDescription
WATCH_POLL_INTERVALnumber(none)Polling interval for trademark watches in seconds (minimum: 60). When unset, uses the watcher’s internal default.
WATCH_AUTO_STARTbooleanfalseAutomatically start the trademark watcher on server startup
VariableTypeDefaultDescription
LOG_LEVELdebug | info | warn | errorinfoMinimum log level. Logs are written as structured JSON to stderr (stdout is reserved for the MCP protocol).
VariableTypeDefaultDescription
ANALYTICS_ENABLEDbooleantrueEnable the in-memory analytics collector and structured log emission
ANALYTICS_INTERVAL_MSnumber60000Interval in milliseconds between periodic metrics log flushes (minimum: 1000)
Terminal window
# Transport
TRANSPORT=http
HTTP_PORT=3000
# Authentication
API_KEYS=key-abc123,key-def456
ADMIN_API_KEY=admin-secret-key
# Provider credentials
USPTO_API_KEY=your-uspto-key
EUIPO_CLIENT_ID=your-euipo-client-id
EUIPO_CLIENT_SECRET=your-euipo-secret
IPAUSTRALIA_CLIENT_ID=your-ipau-client-id
IPAUSTRALIA_CLIENT_SECRET=your-ipau-secret
IPONZ_API_KEY=your-iponz-key
EPO_CONSUMER_KEY=your-epo-key
EPO_CONSUMER_SECRET=your-epo-secret
# Rate limits (optional — defaults are sensible)
USPTO_RATE_LIMIT=60
EUIPO_RATE_LIMIT=60
IPAUSTRALIA_RATE_LIMIT=500
# Cache
CACHE_TTL_SEARCH=300
CACHE_TTL_STATUS=3600
# Logging
LOG_LEVEL=info