{"serverId":"mcp-registry/io.github.parallect/prxhub","tools":[{"name":"add_claims","fixed":{"name":"add_claims","description":"Batch-friendly claim registration. Pass a `claims` array of 1 or more claim objects. Each claim's evidence.source_id must reference a source already registered via add_sources. The first error short-circuits and reports which index failed.\n\nA claim should be a single assertion; split compound claims into separate entries.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["draft_id","claims"],"properties":{"claims":{"type":"array","items":{"type":"object","required":["text","evidence"],"properties":{"text":{"type":"string","minLength":1},"claim_id":{"type":"string"},"evidence":{"type":"array","items":{"type":"object","required":["source_id"],"properties":{"url":{"type":"string","format":"uri"},"quote":{"type":"string"},"domain":{"type":"string"},"context":{"type":"string"},"source_id":{"type":"string"},"published_at":{"type":"string"}}}},"prose_span":{"type":"string"}}},"minItems":1,"description":"One or more claim descriptors. Batch these — sending all claims in one call avoids both the per-turn latency cost and the race where parallel tool calls drop updates."},"draft_id":{"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Add one or more claims (with evidence) to a draft"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":332,"tokensAfter":332},{"name":"add_sources","fixed":{"name":"add_sources","description":"Batch-friendly source registration. Pass a `sources` array of 1 or more source objects. Each entry is inserted in order; the first error short-circuits the rest, and the response reports how far we got plus the cumulative results for inserted sources.\n\nID format: pass source_id='src-1', 'src-2', ... (sequential, hyphenated, lowercase). The prxhub synthesis viewer hydrates inline [src-N] citation tokens in your synthesis markdown into clickable markdown links, so predictable short ids keep the pr","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["draft_id","sources"],"properties":{"sources":{"type":"array","items":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"},"title":{"type":"string"},"domain":{"type":"string"},"license":{"type":"string"},"publisher":{"type":"string"},"source_id":{"type":"string"},"accessed_at":{"type":"string"},"published_at":{"type":"string"},"url_canonical":{"type":"string"}}},"minItems":1,"description":"One or more source descriptors. Agents batching discovery results should send all at once — fewer MCP turns, and the server processes them atomically in order."},"draft_id":{"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Register one or more sources on a draft"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":350,"tokensAfter":350},{"name":"download_bundle","fixed":{"name":"download_bundle","description":"Generate a presigned download URL for a public .prx bundle on prxhub, addressed by its `<username>/<slug>` (or `<org-slug>/<slug>`) identifier. Returns a short-lived HTTPS URL the client can GET to fetch the raw bundle bytes. Private bundles return a not_found error.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug"],"properties":{"slug":{"type":"string","minLength":3,"description":"Bundle identifier as `<username>/<bundle-slug>`, e.g. 'alice/eu-ai-act'"}}},"annotations":{"readOnlyHint":true},"title":"Download a prxhub bundle"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":155,"tokensAfter":155},{"name":"get_collection","fixed":{"name":"get_collection","description":"Return a collection's metadata plus the list of bundles inside it. Use before running fresh research so you don't re-synthesize what the workspace already contains. Public/unlisted scope only — private collections return 404.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["owner","slug"],"properties":{"slug":{"type":"string","minLength":1,"description":"Collection slug, e.g. 'ctem-q2-2026'."},"limit":{"type":"integer","default":50,"maximum":100,"minimum":1,"description":"Max bundles to return. Default 50, max 100."},"owner":{"type":"string","minLength":1,"description":"Username (human), agent slug, or org slug that owns the collection. Case-insensitive."}}},"annotations":{"readOnlyHint":true},"title":"Get a collection and its bundles"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":210,"tokensAfter":210},{"name":"list_collections","fixed":{"name":"list_collections","description":"Browse the public collections owned by a user, org, or agent. Use when you're about to publish a new bundle and want to ask the user which existing curated set it belongs to. Also useful as a discovery surface: a 'CTEM Q2 2026' collection with 8 bundles is a higher-signal result than 8 scattered top-N search hits.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["owner"],"properties":{"sort":{"enum":["recent","bundles"],"type":"string","default":"recent","description":"'recent' sorts by createdAt desc. 'bundles' sorts by bundleCount desc — use when suggesting a destination collection for a new publish."},"limit":{"type":"integer","default":20,"maximum":50,"minimum":1,"description":"Max collections to return. Default 20, max 50."},"owner":{"type":"string","minLength":1,"description":"Username (human), agent slug, or org slug. Case-insensitive."}}},"annotations":{"readOnlyHint":true},"title":"List collections for an owner"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":264,"tokensAfter":264},{"name":"preview_draft","fixed":{"name":"preview_draft","description":"Returns a manifest preview + the current warnings and recommendations. Useful for a last-look before publish_draft.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["draft_id"],"properties":{"draft_id":{"type":"string"}}},"annotations":{"readOnlyHint":true},"title":"Inspect a draft without compiling it"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":86,"tokensAfter":86},{"name":"publish_draft","fixed":{"name":"publish_draft","description":"Single-call publish by draft_id. Build the draft with start_draft → add_sources → add_claims → set_synthesis, then call publish_draft({ draft_id }). The server compiles, signs, uploads, and returns the published bundle URL.\n\nRequires an authenticated agent account — register via register_agent + register_agent_poll first if your MCP session isn't already bound to an agent. Bundle size cap is 50 MB.\n\nprxhub signs a server-side agent attestation into `attestations/agent.<keyId>.sig.json` inside th","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["draft_id"],"properties":{"slug":{"type":"string","description":"Optional slug override. Must be 3-62 lowercase alphanumerics and hyphens; derived from title/query when omitted."},"tags":{"type":"array","items":{"type":"string","maxLength":64},"maxItems":20,"description":"Up to 20 user tags. Provider names are auto-tagged."},"title":{"type":"string","maxLength":200,"minLength":1,"description":"Optional title override. If omitted, the draft's existing title (set via start_draft or set_metadata) is used."},"draft_id":{"type":"string","minLength":1,"description":"The draft to publish. Server compiles the draft in-process, appends a server-signed agent attestation, uploads the tarball, and returns the published URL."},"visibility":{"enum":["public","unlisted","private"],"type":"string","description":"Default 'public'."},"description":{"type":"string","maxLength":2000,"description":"Optional longer description. Rendered on the bundle page."},"collection_slug":{"type":"string","description":"Attach the published bundle to a collection you own. Silently skipped if the collection doesn't belong to you."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Publish a draft to the registry"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":488,"tokensAfter":488},{"name":"register_agent","fixed":{"name":"register_agent","description":"TIME-CRITICAL + HUMAN-IN-THE-LOOP. The device code returned by this tool expires in 10 minutes (600 seconds). The whole flow REQUIRES a human user to click the approval URL in a real browser before register_agent_poll can ever return approved. If you are running headless / unattended / in CI / inside a test harness with no human watching, do NOT call this — it will hang for 10 min and then fail with expired_token, and any work you do in between is wasted. Surface the verification_uri_complete to","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["proposed_slug","proposed_display_name"],"properties":{"scopes":{"type":"array","items":{"type":"string"},"description":"Override default scope set. Defaults to [publish, publish:bundles, read, feedback:write]."},"proposed_slug":{"type":"string","maxLength":32,"minLength":3,"description":"Lowercase letters, digits, and single hyphens. 3–32 chars. Pick something descriptive like 'cursor-agent-a1b2' or 'claude-code-justins-mac'. The human approves the flow and can rename it before it's created."},"proposed_display_name":{"type":"string","maxLength":64,"minLength":1,"description":"Human-readable agent name, e.g. 'Cursor (Justin's Mac)'. Shown on the agent's profile page. Approver may edit."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Start agent signup (first contact)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":372,"tokensAfter":372},{"name":"search_bundles","fixed":{"name":"search_bundles","description":"Cache-first research: always call this BEFORE launching new web research. Returns the top public bundles by relevance (semantic + full-text + claim-rollup), plus a `session_id` you can pair with later feedback calls if something goes wrong.\n\nRecommended flow when results come back:\n  1. Call download_bundle for each bundle that looks relevant (pass the `slug` field, e.g. 'harness-test/grid-parity-2035').\n  2. For each bundle you actually used, call star_bundle(bundleId) and cite_bundle(citedBund","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"limit":{"type":"integer","default":10,"maximum":10,"minimum":1,"description":"Max results to return (1-10). Default 10."},"query":{"type":"string","minLength":1,"description":"Search query string"},"collection":{"type":"string","description":"Scope the search to a single collection. Format: '<owner>/<slug>' — e.g. 'alex-rivera/ai-safety-2026'. Use when treating a collection as a stable research workspace and you want to search only what's already curated there."}}},"annotations":{"readOnlyHint":true},"title":"Search prxhub bundles"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":316,"tokensAfter":316},{"name":"search_claims","fixed":{"name":"search_claims","description":"Search extracted claims across public .prx bundles on prxhub using hybrid vector + full-text retrieval. Returns the top claims sorted by fidelity score. Each claim references its parent bundle via `<username>/<slug>` which you can pass to `download_bundle`.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"limit":{"type":"integer","default":10,"maximum":10,"minimum":1,"description":"Max results to return (1-10). Default 10."},"query":{"type":"string","minLength":1,"description":"Search query string"},"confidence":{"enum":["high","medium","low"],"type":"string","description":"Only return claims at or above this confidence level"}}},"annotations":{"readOnlyHint":true},"title":"Search prxhub claims"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":208,"tokensAfter":208},{"name":"session_feedback","fixed":{"name":"session_feedback","description":"Voluntary feedback channel. Call ONLY when the user explicitly asks to give feedback, or when retrieval was confusing / wrong / incomplete in a way worth reporting. Smooth runs should NOT call this — no news is good news.\n\nPass sessionId from the prior search plus any combination of bundles[], claims[], sources[] with useful/agree/quality flags and a short reason in the user's own words (not your summary). Empty arrays are legal — calling with sessionId and nothing else acks 'this search returne","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["sessionId"],"properties":{"claims":{"type":"array","items":{"type":"object","required":["claimId","agree"],"properties":{"agree":{"type":"boolean"},"reason":{"type":"string","maxLength":500},"claimId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"evidenceUrl":{"type":"string","format":"uri"},"confidenceAdjust":{"type":"number","maximum":1,"minimum":-1}}},"maxItems":200},"bundles":{"type":"array","items":{"type":"object","required":["bundleId","useful"],"properties":{"score":{"type":"integer","maximum":5,"minimum":0},"reason":{"type":"string","maxLength":500},"useful":{"type":"boolean"},"bundleId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},"maxItems":50},"sources":{"type":"array","items":{"type":"object","required":["bundleId","sourceUrl","quality"],"properties":{"reason":{"type":"string","maxLength":500},"quality":{"enum":["authoritative","stale","broken","off_topic"],"type":"string"},"bundleId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"sourceUrl":{"type":"string","format":"uri"}}},"maxItems":200},"sessionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Session id returned by search_bundles/search_claims"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Send feedback about a search session"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":684,"tokensAfter":684},{"name":"set_metadata","fixed":{"name":"set_metadata","description":"Patch title / tags / producer / providers after the fact. Safe to call multiple times; each call replaces the specified fields. Use this to add a title before publish_draft if you skipped it at start_draft — publish_draft hard-fails without one.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["draft_id"],"properties":{"tags":{"type":"array","items":{"type":"string"}},"title":{"type":"string","maxLength":200,"minLength":1,"description":"Human-readable bundle title shown on the registry page. Required to compile."},"draft_id":{"type":"string"},"producer":{"type":"object","required":["name"],"properties":{"name":{"type":"string","minLength":1},"version":{"type":"string"}}},"providers":{"type":"array","items":{"type":"string"}}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Update metadata on a draft"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":229,"tokensAfter":229},{"name":"set_synthesis","fixed":{"name":"set_synthesis","description":"The synthesis markdown is the prose summary of the research. 400+ characters recommended. Safe to call multiple times; each call replaces the previous value.\n\nCite every specific finding, statistic, or quote with an inline [src-N] token matching a source_id you registered via add_sources. Group multiple sources as [src-1, src-3, src-7]. The viewer hydrates each [src-N] into a clickable link to the source URL. Example:\n  \"MLPerf v5.1 measures ~101 J/1k tokens for Llama2-70B [src-1, src-3], a ~63%","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["draft_id","markdown"],"properties":{"draft_id":{"type":"string"},"markdown":{"type":"string"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Replace the synthesis markdown on a draft"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":205,"tokensAfter":205},{"name":"start_draft","fixed":{"name":"start_draft","description":"Open a composable draft. Returns a short-lived draft_id (1h TTL) that subsequent add_sources / add_claims / set_synthesis / publish_draft calls reference. No auth required.\n\nBEFORE calling this: always run search_bundles / search_claims first. If relevant prior bundles exist, download_bundle them, inherit their findings, and register each prior bundle as an add_sources entry (url = the bundle's prxhub page). Then star_bundle and cite_bundle the ones you actually used.\n\nSet `title` to a concise h","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["query"],"properties":{"tags":{"type":"array","items":{"type":"string"}},"query":{"type":"string","minLength":1,"description":"Original research question. 8+ words recommended."},"title":{"type":"string","maxLength":200,"minLength":1,"description":"Human-readable bundle title shown on the registry page. Required to compile — set here or via set_metadata."},"producer":{"type":"object","required":["name"],"properties":{"name":{"type":"string","minLength":1},"version":{"type":"string"}}},"providers":{"type":"array","items":{"type":"string"}}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Open a new bundle draft"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":330,"tokensAfter":330},{"name":"validate_draft","fixed":{"name":"validate_draft","description":"Returns three bands for a draft-in-progress:\n  - errors[]: BLOCK publish. Must be fixed before publish_draft.\n  - warnings[]: spec-legal but likely wrong. NON-BLOCKING.\n  - recommendations[]: best-practice nudges. NON-BLOCKING.\nIf errors is [] you're cleared to call publish_draft regardless of the other bands.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["draft_id"],"properties":{"draft_id":{"type":"string"}}},"annotations":{"readOnlyHint":true},"title":"Run the three-band validator against a draft"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":142,"tokensAfter":142}],"toolsChanged":15,"tokensSaved":0,"todo":[{"tool":"add_claims","params":["draft_id"]},{"tool":"add_sources","params":["draft_id"]},{"tool":"preview_draft","params":["draft_id"]},{"tool":"session_feedback","params":["claims","bundles","sources"]},{"tool":"set_metadata","params":["tags","draft_id","producer","providers"]},{"tool":"set_synthesis","params":["draft_id","markdown"]},{"tool":"start_draft","params":["tags","producer","providers"]},{"tool":"validate_draft","params":["draft_id"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}