{"server":{"name":"io.jsonpad/docs","title":"JSONPad documentation","$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","remotes":[{"url":"https://mcp.jsonpad.io/docs","type":"streamable-http"}],"version":"0.1.0","packages":[{"version":"0.1.0","transport":{"type":"stdio"},"identifier":"@basementuniverse/jsonpad-docs-mcp","registryType":"npm"}],"websiteUrl":"https://jsonpad.io/docs/mcp","description":"JSONPad docs, API, SDK and CLI references, and offline checkers for write rules and flows."},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","isLatest":true,"updatedAt":"2026-09-30T20:20:57.447081Z","publishedAt":"2026-09-30T20:20:57.447081Z","statusChangedAt":"2026-09-30T20:20:57.447081Z"},"dev.protogrid/connectability":{"class":"R0","autonomous":true,"human_steps":[],"preferred":{"kind":"remote","idx":0},"remotes":[{"idx":0,"url":"https://mcp.jsonpad.io/docs","transport":"streamable-http","templated":false,"headers":[],"auth":{"type":"none","location":null,"secret_name":null,"oauth":null},"protocol":{"supported_versions":["2025-11-25"],"stateless":true},"health":{"reachable":true,"uptime_30d":1,"latency_ms_p50":237,"consecutive_failures":0,"last_probe_at":"2026-10-20T00:51:37.513Z","last_ok_at":"2026-10-20T00:51:37.513Z"}}],"packages":[{"idx":0,"registry_type":"npm","identifier":"@basementuniverse/jsonpad-docs-mcp","version":"0.1.0","runtime_hint":null,"transport":"stdio","secrets":[],"requires_execution":true}]},"dev.protogrid/tools":[{"name":"check_flow","title":"Check a flow","description":"Compile a flow document (flows-v1) with the same engine the API uses, and run its tests (flow-tests-v1) against in-memory data. Returns diagnostics (with JSON pointers into the document), what the flow reads and writes, and why each failing test failed. Costs nothing and sees no data.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-20T00:51:37.513Z"},{"name":"check_write_rules","title":"Check write rules","description":"Compile a list's write rules with the same engine the API uses, and run their tests (a rules-tests-v1 document). Returns every diagnostic with its line and column, and for each failing test what it expected, what happened, and how each rule came out. Costs nothing and sees no data: lookups find the test document's items. Use it before saving rules.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-20T00:51:37.513Z"},{"name":"eval_write_rule","title":"Try a write against write rules","description":"Check one write against a rule set, as the API would, and say whether it would be allowed, denied (403) or failed (400), which statement decided it, and (with trace) what every expression evaluated to. The write is shaped like a rule test case: action, identity, token, old, new, patch, merge, now. Costs nothing and sees no data.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-20T00:51:37.513Z"},{"name":"get_api_endpoint","title":"Get a JSONPad API endpoint contract","description":"The full contract of one REST API endpoint: parameters, headers, request body, responses and examples, and the JavaScript SDK method that calls it. Find it by id (the docs page slug, e.g. \"item-restore\"), by method and path (templates or concrete paths both work: \"/lists/my-list/items/abc\"), or by a description.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-20T00:51:37.513Z"},{"name":"get_cli_command","title":"Get a JSONPad CLI command","description":"The usage, arguments and options of a jsonpad command line tool (@basementuniverse/jsonpad-cli) command, and whether it works offline. Find it by name (\"rules test\", \"jsonpad sync-schema --dry-run\") or by what it does.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-20T00:51:37.513Z"},{"name":"get_plan_limits","title":"Get JSONPad plan limits","description":"The limits of each public plan (Free, Indie, Pro, Scale): requests per month and minute, the minimum gap between requests, storage, item size, versions kept, tokens, identities, realtime connections, webhooks and flows. null means unlimited. Sizes are in bytes, rateLimit in milliseconds, prices in GBP.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-20T00:51:37.513Z"},{"name":"get_sdk_method","title":"Get a JSONPad SDK method","description":"The signature, description and example of a method in the JavaScript SDK (@basementuniverse/jsonpad-sdk) or the realtime SDK, and the REST endpoint it calls. Find it by name (\"restoreItem\") or by what it does.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-20T00:51:37.513Z"},{"name":"list_api_endpoints","title":"List the JSONPad API endpoints","description":"List the REST API endpoints an API token can use, as method, path and title. Get one in full with get_api_endpoint.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-20T00:51:37.513Z"},{"name":"list_docs","title":"List the JSONPad docs pages","description":"List the documentation pages by section, with a description of each: the table of contents.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-20T00:51:37.513Z"},{"name":"lookup_error","title":"Look up a JSONPad error","description":"What a JSONPad API error code means, its HTTP status, and the guides that explain it. Give the numeric code (10013) or the name (QUOTA_EXCEEDED), as found in an error response's \"code\" and \"name\".","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-20T00:51:37.513Z"},{"name":"read_doc","title":"Read a JSONPad docs page","description":"Read a documentation page as markdown, or one section of it. Give a page slug (\"indexing\"), a /docs path, a jsonpad.io URL (with or without .md, and with an optional #anchor), \"sdk/jsonpad-sdk\", \"sdk/jsonpad-realtime-sdk\", \"cli/reference\" or \"cli/readme\". Long pages are cut at a section boundary; read on with the returned nextSection.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-20T00:51:37.513Z"},{"name":"search_docs","title":"Search the JSONPad docs","description":"Search the JSONPad documentation, the JavaScript SDK references and the command line tool reference. Returns the best-matching sections with a snippet and their jsonpad.io URL; read one with read_doc. Exact identifiers work well: error codes and names, headers, SDK methods, CLI commands, $jsonpad-var variables, \"POST /lists/{listId}/items\".","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-20T00:51:37.513Z"},{"name":"validate_sync_document","title":"Validate a schema sync document","description":"Check a schema sync document (sync-v1) as far as possible without an account: against the JSON schema the API uses, the API's rules for keys and indexes, and every rule set and flow in it with their tests. Documents that reference files (rulesFile, flowFile and their tests) are checked too if the files' contents are given in files. What a sync would change needs the account: the API server's plan_schema_sync, or jsonpad sync-schema --dry-run.","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-20T00:51:37.513Z"},{"name":"validate_token_permissions","title":"Validate token permissions","description":"Check an API token's permission rules against the schema the API uses, say which rule shape a broken one was meant to be, and warn about valid rules that probably don't do what was meant (rule order, restore without view, sync-schema alone, allow \"*\").","annotations":{"readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-20T00:51:37.513Z"}],"dev.protogrid/trust":{"score":83,"components":{"hygiene":80,"liveness":100,"freshness":100,"provenance":55},"drivers":["+dns-namespace","+website","+reachable","+uptime-100%","+updated-19d-ago","-no-repository"],"flags":["no-repository"],"blocked":false,"computed_at":"2026-10-20T02:40:51.324Z","disclaimer":"Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed."},"dev.protogrid/quality":{"score":91,"label":"strong","components":{"auth":null,"hygiene":100,"protocol":75,"stability":100,"dependencies":null},"checks":[{"id":"protocol.modern","detail":"newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28","status":"warn","category":"protocol"},{"id":"protocol.stateless","detail":"only applies to 2026-07-28 servers","status":"na","category":"protocol"},{"id":"protocol.transport","detail":"streamable HTTP","status":"pass","category":"protocol"},{"id":"protocol.list_ttl","detail":"only applies to 2026-07-28 servers","status":"na","category":"protocol"},{"id":"auth.prm","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.as_metadata","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.cimd","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.secret_in_url","detail":"no templated URL","status":"na","category":"auth"},{"id":"tools.descriptions","detail":"every tool has a description","status":"pass","category":"hygiene"},{"id":"tools.description_length","detail":"descriptions are concise","status":"pass","category":"hygiene"},{"id":"tools.schemas","detail":"every tool has an object input schema","status":"pass","category":"hygiene"},{"id":"tools.annotations","detail":"14 of 14 tools declare readOnlyHint or destructiveHint","status":"pass","category":"hygiene"},{"id":"tools.directory_hints","detail":"every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint","status":"pass","category":"hygiene"},{"id":"tools.token_cost","detail":"about 3,127 tokens to load every tool","status":"pass","category":"hygiene"},{"id":"tools.api_dump","detail":"tools are not a one-to-one API dump","status":"pass","category":"hygiene"},{"id":"stability.changes","detail":"no tool changes in 30 days","status":"pass","category":"stability"},{"id":"stability.rug_pull","detail":"no tool changed its meaning under the same name","status":"pass","category":"stability"},{"id":"deps.known_vulns","detail":"deps.dev does not know @basementuniverse/jsonpad-docs-mcp@0.1.0","status":"na","category":"dependencies"},{"id":"deps.mcp_sdk_version","detail":"deps.dev does not know @basementuniverse/jsonpad-docs-mcp@0.1.0","status":"na","category":"dependencies"},{"id":"deps.resolvable","detail":"deps.dev does not know @basementuniverse/jsonpad-docs-mcp@0.1.0","status":"na","category":"dependencies"}],"drivers":["~protocol.modern"],"flags":[],"tool_count":14,"token_estimate":3127,"tools_hash":"5357dfe5e28a69ba1927ed246e384d88","tools_changed_at":null,"computed_at":"2026-10-20T03:05:22.594Z","disclaimer":"Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed."},"dev.protogrid/identity":{"canonical_id":"io.jsonpad/docs","aliases":[],"alias_count":0,"repository_key":null,"owner":{"verified":false,"method":null,"since":null}}},"next_actions":[{"action":"list_tools","description":"Every current tool with input schemas","href":"/v1/servers/io.jsonpad%2Fdocs/tools","arguments":{"name":"io.jsonpad/docs"}},{"action":"get_connection","description":"Minimal connection block for the preferred remote or package","href":"/v1/servers/io.jsonpad%2Fdocs/connection?target=mcpServers","arguments":{"name":"io.jsonpad/docs","target":"mcpServers"}},{"action":"search","description":"Find other servers by intent","href":"/v1/search?q={query}","arguments":{"q":"{query}"}}]}