Authentication
Send your MCP API key in either of these ways:GET /api/auth/mcp-keyPOST /api/auth/mcp-key/rotateDELETE /api/auth/mcp-key
Key management endpoints (developer use)
MCP methods currently used
Paperzilla supports standard MCP flows including:initializetools/listtools/callprompts/listprompts/get
Initialize example
The examples below use header auth.Tools
| Tool | Input |
|---|---|
projects_list | {} |
projects_get | { "project_id": "uuid" } |
feed_get | { "project_id": "uuid", "must_read"?: boolean, "since"?: string, "limit"?: 1..100, "offset"?: 0.. } |
feed_search | { "project_id": "uuid", "q": "string (3..200 chars after trim)", "feedback_filter"?: "enum", "must_read"?: boolean, "limit"?: 1..100, "offset"?: 0.. } |
feed_atom_url | { "project_id": "uuid" } |
paper_get | { "paper_id": "uuid-or-short-id-or-feed-item-id" } |
paper_markdown | { "paper_id": "uuid-or-short-id-or-feed-item-id" } |
paper.get remain accepted for direct tools/call compatibility, but Claude-compatible clients should use the underscore names above. The feed search alias is feed.search.
paper_get accepts the same identifier forms as the paper API:
- paper UUID
- paper
short_id project_paperUUIDproject_papershort_id
projects_* and feed_* outputs follow the same shape as the corresponding API responses.
feed_search is the MCP path for full-feed text search. It searches title, author, abstract, and summary text across the entire project feed.
feed_search.feedback_filter accepts:
allunratedlikeddislikedstarrednot-relevantlow-quality
feed_search returns:
itemslimitoffsethas_morequery
- query terms use prefix matching, so
ProximatchesProximity - search is rank-first, not browse-order-first
- no exact
totalis returned in v1
paper_get returns the same paper detail fields as the authenticated paper API, including markdown_ready.
paper_markdown always returns a structured object:
- ready:
- queued:
- unavailable:
Tool call examples
List projects:Prompt
Prompt name:feed_title_filter
project_id(required)title_keyword(required)must_read(optional)feedback_filter(optional)limit(optional)
feed_search and explain that the search is server-side across the full feed.
Error semantics
- Invalid/missing key: HTTP
401 - Disallowed
Origin: HTTP403 - Invalid MCP method/JSON-RPC shape: protocol-level error
- Business/domain errors (ownership, missing project, missing paper, ambiguous short ID): tool result with
isError: true paper_markdownqueueing and source-unavailable cases are normal tool results, not tool errors