{"openapi":"3.1.0","info":{"title":"Wikinews MCP","version":"0.1.0","summary":"Search the Wikinews archive — world, politics, science, sport and business reporting.","description":"A remote Model Context Protocol server over streamable HTTP. The whole API is one JSON-RPC 2.0 endpoint; the request `method` selects the operation and `params` carries its arguments. MCP clients use this natively; any HTTP client can call it as described here.\n\nDeprecation policy: tools and their argument schemas are not renamed or removed without notice. A deprecation is announced in this document and in the affected tool's description, naming the removal date, and the deprecated tool keeps working for at least 30 days after that announcement. Nothing is deprecated at present.","contact":{"name":"Miso","url":"https://miso.ai"},"x-content-license":"https://creativecommons.org/licenses/by/2.5/","x-versioning-policy":"The API is versioned by MCP protocol version, negotiated per session: the client proposes `params.protocolVersion` in `initialize` and the server replies with the version it will speak (currently 2024-11-05); on later requests the client sends it back in the `MCP-Protocol-Version` header. The endpoint path never changes. The server's own release is `info.version`; tool names and argument schemas are stable within a major version.","x-deprecation-policy":"Tools and their argument schemas are not renamed or removed without notice. A deprecation is announced here and in the affected tool's description, naming the removal date; the deprecated tool keeps working for at least 30 days after that announcement. Nothing is deprecated at present."},"servers":[{"url":"https://wikinews.mcp.miso.ai"}],"externalDocs":{"description":"Install guide and llms.txt","url":"https://wikinews.mcp.miso.ai/llms.txt"},"x-mcp":{"serverCard":"https://wikinews.mcp.miso.ai/.well-known/mcp-server-card","protocolVersions":["2024-11-05","2025-03-26","2025-06-18"],"transport":"streamable-http"},"paths":{"/mcp":{"post":{"operationId":"jsonrpc","summary":"MCP JSON-RPC endpoint","description":"Send one JSON-RPC 2.0 request. Supported methods: `initialize`, `ping`, `tools/list`, `tools/call`.","security":[{"oauth2":[]}],"parameters":[{"name":"MCP-Protocol-Version","in":"header","required":false,"description":"The protocol version negotiated in `initialize`. Sent by MCP clients on every request after initialization.","schema":{"type":"string","enum":["2024-11-05","2025-03-26","2025-06-18"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/InitializeRequest"},{"$ref":"#/components/schemas/PingRequest"},{"$ref":"#/components/schemas/ToolsListRequest"},{"$ref":"#/components/schemas/ToolsCallRequest"},{"$ref":"#/components/schemas/InitializedNotification"}]},"examples":{"search":{"summary":"Call ask_wikinews","value":{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ask_wikinews","arguments":{"question":"2010 Haiti earthquake relief effort"}}}}}}}},"responses":{"200":{"description":"A JSON-RPC 2.0 response: `result` on success, `error` (code, message) otherwise. Tool results are MCP `content` blocks.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcResponse"}}}},"202":{"description":"The body was a JSON-RPC notification (no `id`, method under `notifications/`, e.g. `notifications/initialized` after `initialize`). Accepted, no body; notifications are never answered."},"401":{"description":"Missing or invalid bearer token. The challenge points at the RFC 9728 protected-resource metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthError"}}},"headers":{"WWW-Authenticate":{"schema":{"type":"string"},"example":"Bearer resource_metadata=\"https://wikinews.mcp.miso.ai/.well-known/oauth-protected-resource/mcp\""}}},"405":{"description":"Any method but POST. This server offers no GET stream; the `Allow` header says `POST`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MethodNotAllowedError"}}},"headers":{"Allow":{"schema":{"type":"string"},"example":"POST"}}}}}}},"components":{"securitySchemes":{"oauth2":{"type":"oauth2","description":"OAuth 2.1: authorization code with PKCE (S256) and dynamic client registration. No scopes are defined; every token grants read access to the tools. Clients discover the flow from the 401 challenge and https://wikinews.mcp.miso.ai/.well-known/oauth-protected-resource/mcp.","flows":{"authorizationCode":{"authorizationUrl":"https://wikinews.mcp.miso.ai/oauth/authorize/wikinews","tokenUrl":"https://wikinews.mcp.miso.ai/oauth/token","refreshUrl":"https://wikinews.mcp.miso.ai/oauth/token","scopes":{}}},"x-dynamic-client-registration":"https://wikinews.mcp.miso.ai/oauth/register","x-protected-resource-metadata":"https://wikinews.mcp.miso.ai/.well-known/oauth-protected-resource/mcp","x-authorization-server-metadata":"https://wikinews.mcp.miso.ai/.well-known/oauth-authorization-server/wikinews"}},"schemas":{"JsonRpcId":{"oneOf":[{"type":"string"},{"type":"integer"}]},"InitializeRequest":{"type":"object","required":["jsonrpc","id","method","params"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"$ref":"#/components/schemas/JsonRpcId"},"method":{"const":"initialize"},"params":{"type":"object","properties":{"protocolVersion":{"type":"string","enum":["2024-11-05","2025-03-26","2025-06-18"]},"capabilities":{"type":"object"},"clientInfo":{"type":"object"}}}}},"PingRequest":{"type":"object","required":["jsonrpc","id","method"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"$ref":"#/components/schemas/JsonRpcId"},"method":{"const":"ping"}}},"InitializedNotification":{"type":"object","description":"Sent once by the client after `initialize` succeeds. No `id` -- it is a notification and gets a 202.","required":["jsonrpc","method"],"properties":{"jsonrpc":{"const":"2.0"},"method":{"const":"notifications/initialized"}}},"ToolsListRequest":{"type":"object","required":["jsonrpc","id","method"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"$ref":"#/components/schemas/JsonRpcId"},"method":{"const":"tools/list"}}},"ToolsCallRequest":{"type":"object","required":["jsonrpc","id","method","params"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"$ref":"#/components/schemas/JsonRpcId"},"method":{"const":"tools/call"},"params":{"oneOf":[{"$ref":"#/components/schemas/Call_ask_wikinews"},{"$ref":"#/components/schemas/Call_get_wikinews_article"}]}}},"Call_ask_wikinews":{"type":"object","description":"Search the Wikinews archive — world, politics, science, sport and business reporting.","required":["name","arguments"],"properties":{"name":{"type":"string","const":"ask_wikinews"},"arguments":{"type":"object","properties":{"question":{"type":"string","description":"The question to search for."},"context":{"type":"string","description":"Additional context about what the user is working on or trying to achieve."},"skill_used":{"type":"string","description":"If this tool call is being made as part of executing a skill or prompt template, provide the name or identifier of that skill here. Leave unset for direct user-initiated searches."}},"required":["question"]}}},"Call_get_wikinews_article":{"type":"object","description":"Get the full text of a specific snippet returned by ask_wikinews, using its product_id and offset.\n\nReturns JSON with: product_id, product_title, authors, content, url, citation_format, citation_instruction, and optional child_title, published_date.\n\nWORKFLOW DEPENDENCY: You MUST call ask_wikinews first — this tool only accepts a product_id and offset that ask_wikinews returned, and only snippets from those results are accessible (arbitrary values are rejected).\n\nCITING SOURCES (REQUIRED): Always cite using the clickable markdown link in the citation_format field; it takes the reader straight to the source.\n\nWorkflow:\n1. Call ask_wikinews with your question.\n2. Call get_wikinews_article with a product_id and offset from the results you want to read in full.\n3. Cite the content using the citation_format field.","required":["name","arguments"],"properties":{"name":{"type":"string","const":"get_wikinews_article"},"arguments":{"type":"object","properties":{"product_id":{"type":"string","description":"The product ID from search results (required)"},"offset":{"type":"integer","description":"The snippet offset from search results (identifies specific snippet in the book)"},"skill_used":{"type":"string","description":"If this tool call is being made as part of executing a skill or prompt template, provide the name or identifier of that skill here. Leave unset for direct user-initiated searches."}},"required":["product_id","offset"]}}},"JsonRpcError":{"type":"object","description":"JSON-RPC 2.0 error object. Returned in the response body with HTTP 200; the HTTP status is only used for transport-level failures (401, 405).","required":["code","message"],"properties":{"code":{"type":"integer","enum":[-32700,-32603],"x-enumDescriptions":{"-32700":"Parse error: the body is not valid JSON (`data` carries the parser message).","-32603":"Internal error: the request was understood but could not be served -- unknown method or tool, invalid arguments (`message` says which), or a server fault (`data` carries detail)."}},"message":{"type":"string","description":"Human-readable reason, safe to show to the user."},"data":{"description":"Optional detail: a string for parse/server faults."}}},"TransportError":{"type":"object","description":"Body of a transport-level failure (401, 405): a machine-readable `error.code`, a message, the HTTP status and a `hint` saying what to do next. The top-level `message` repeats `error.message` for clients that read the older flat body.","required":["error","message"],"properties":{"error":{"type":"object","required":["code","message","status"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"status":{"type":"integer"},"hint":{"type":"string"}}},"message":{"type":"string"}}},"AuthError":{"description":"Body of a 401. The `WWW-Authenticate` header carries the resource-metadata URL to start OAuth from; `error.hint` repeats it.","allOf":[{"$ref":"#/components/schemas/TransportError"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"const":"unauthorized"},"status":{"const":401}}},"message":{"const":"valid bearer token required"}}}]},"MethodNotAllowedError":{"description":"Body of a 405 (any method but POST).","allOf":[{"$ref":"#/components/schemas/TransportError"},{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"const":"method_not_allowed"},"status":{"const":405}}},"message":{"const":"Method Not Allowed"}}}]},"JsonRpcResponse":{"type":"object","description":"Exactly one of `result` or `error` is present.","required":["jsonrpc","id"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"$ref":"#/components/schemas/JsonRpcId"},"result":{"type":"object"},"error":{"$ref":"#/components/schemas/JsonRpcError"}},"oneOf":[{"required":["result"]},{"required":["error"]}]}}}}