{"$schema":"https://modelcontextprotocol.io/schemas/draft/server-card.json","name":"waniwani","displayName":"Waniwani","description":"Operate the Waniwani AI distribution platform from an MCP client: inspect organizations, MCP environments and API keys, pull analytics digests and session breakdowns, and run scope-checked API calls in a sandbox.","version":"1.0.0","serverInfo":{"name":"Waniwani","version":"1.0.0"},"websiteUrl":"https://waniwani.ai","documentationUrl":"https://docs.waniwani.ai/mcp-server/overview","icons":[{"src":"https://waniwani.ai/icon.svg","mimeType":"image/svg+xml","sizes":["any"]}],"url":"https://mcp.waniwani.ai/mcp","transport":"streamable-http","remotes":[{"type":"streamable-http","url":"https://mcp.waniwani.ai/mcp","region":"us","description":"US data residency."},{"type":"streamable-http","url":"https://eu.mcp.waniwani.ai/mcp","region":"eu","description":"EU data residency."}],"capabilities":{"tools":true,"resources":false,"prompts":false},"authentication":"oauth2","oauth":{"type":"oauth2.1","pkce":"S256","protectedResourceMetadata":"https://mcp.waniwani.ai/.well-known/oauth-protected-resource","authorizationServers":["https://app.waniwani.ai"],"scopesSupported":["mcp:tools","mcp:read","mcp:write","orgs:read","orgs:write","kb:read","kb:write","analytics:read","analytics:write","conversations:read","conversations:write","openid","profile","email","offline_access"]},"tools":[{"name":"whoami","description":"Return the authenticated Waniwani identity: user id, super-admin status, granted OAuth scopes, the active organization, and the organizations you can act on.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"set_active_org","description":"Switch the active organization for subsequent calls. You must be a member of the target org (or a super admin). Call `whoami` to list the organizations you can switch to. The switch takes effect on the next tool call.","inputSchema":{"type":"object","properties":{"orgId":{"type":"string","minLength":1,"description":"The organization id to set as active (see `whoami` for valid ids)."}},"required":["orgId"]},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"search","description":"Discover the Waniwani API operations available to the `execute` tool. Pass a keyword to get the matching operations with their full TypeScript signatures (inputs and response shapes); omit it to list every operation by name. Always call this before `execute` to learn the exact `api.*` names, arguments, and return types.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Keyword to match against operation names and descriptions. Omit to list all operation names."}}},"annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"execute","description":"Run a snippet of JavaScript in a secure sandbox to call the Waniwani API. Call `search` first to discover the available `api.*` operations and their signatures. The code runs with your OAuth identity; each api.* call is scope-checked. Top-level await is supported — `return` a value to get it back.","inputSchema":{"type":"object","properties":{"code":{"type":"string","minLength":1,"description":"JavaScript to run in the sandbox. Call operations as `api.<name>(args)` and `return` the result."}},"required":["code"]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}}]}