stdin: {"id":1,"jsonrpc":"2.0","method":"initialize","params":{"capabilities":{},"clientInfo":{"name":"toolwitness","version":"s772-v0"},"protocolVersion":"2025-11-25"}} {"jsonrpc":"2.0","method":"notifications/initialized"} {"id":2,"jsonrpc":"2.0","method":"tools/list","params":{}} stdout: {"result":{"protocolVersion":"2025-11-25","capabilities":{"tools":{"listChanged":true}},"serverInfo":{"name":"proxyllm","version":"1.0.0"}},"jsonrpc":"2.0","id":1} {"result":{"tools":[{"name":"proxyllm_savings_calculator","title":"LLM spend: API vs subscription math","description":"Given a monthly OpenAI API bill in USD, returns the ChatGPT/Codex subscription tier that absorbs that workload through ProxyLLM Codex Hosted, the flat total (subscription + $129 fee), and the monthly savings. Free, no auth.","inputSchema":{"type":"object","properties":{"monthly_openai_bill_usd":{"type":"number","minimum":0}},"required":["monthly_openai_bill_usd"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"execution":{"taskSupport":"forbidden"}},{"name":"proxyllm_list_models","title":"List models","description":"OpenAI-shaped model list from the gateway. No auth required; with a routing key it reflects that key's lanes, including the live Codex catalog.","inputSchema":{"type":"object","properties":{"routing_key":{"type":"string"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"execution":{"taskSupport":"forbidden"}},{"name":"proxyllm_introspect_key","title":"Introspect a routing key","description":"GET /v1/key: the key's provider lanes, reachable models, whether a Codex subscription backs it, and monthly budget state. Authed by the routing key itself.","inputSchema":{"type":"object","properties":{"routing_key":{"type":"string"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"execution":{"taskSupport":"forbidden"}},{"name":"proxyllm_signup","title":"Create a ProxyLLM account (email OTP)","description":"Starts autonomous account creation: a 6-digit code is emailed to the operator's inbox (no captcha, no browser). New accounts are unpaid and are removed after 48 hours unless a human activates the membership. Follow with proxyllm_verify_signup.","inputSchema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"The human operator's email"},"source":{"type":"string","description":"Attribution slug; defaults to mcp"}},"required":["email"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"execution":{"taskSupport":"forbidden"}},{"name":"proxyllm_verify_signup","title":"Verify the emailed code, receive the account token","description":"Exchanges the 6-digit code for an sk_ account token. The token is returned exactly once: store it (PROXYLLM_ACCOUNT_TOKEN). While the account is unpaid the response carries a checkout link to relay to the operator.","inputSchema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"code":{"type":"string"}},"required":["email","code"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"execution":{"taskSupport":"forbidden"}},{"name":"proxyllm_account","title":"Account state (poll until paid)","description":"GET /v1/organizations/me. Works while unpaid: plan is \"free\" plus a payment block until the operator activates the membership, then \"pro\". Poll this after handing over the checkout link.","inputSchema":{"type":"object","properties":{"account_token":{"type":"string"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"execution":{"taskSupport":"forbidden"}},{"name":"proxyllm_create_routing_key","title":"Create a routing key","description":"Mints a pllm_ routing key (returned once) for OPENAI_API_KEY-style use against the gateway. Optionally wires the provider chain in the same call; discover wireable lane ids with proxyllm_list_routing_keys include_lanes.","inputSchema":{"type":"object","properties":{"account_token":{"type":"string"},"label":{"type":"string","maxLength":60},"monthly_budget_usd":{"type":"number","exclusiveMinimum":0},"mode":{"type":"string","enum":["fallback","classifier"]},"providers":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string","description":"codex, bridge, or an API-key provider (openai, anthropic, openrouter, ...)"},"model":{"type":["string","null"]},"credential_id":{"type":["string","null"]},"codex_session_id":{"type":["string","null"]},"bridge_instance_id":{"type":["string","null"]}},"required":["provider"],"additionalProperties":false},"maxItems":5}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"execution":{"taskSupport":"forbidden"}},{"name":"proxyllm_list_routing_keys","title":"List routing keys (and wireable lanes)","description":"Lists the account's routing keys. include_lanes adds the wireable lanes (connected Codex sessions, bridges, saved provider keys) with the ids provider chains reference.","inputSchema":{"type":"object","properties":{"account_token":{"type":"string"},"include_lanes":{"type":"boolean"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"execution":{"taskSupport":"forbidden"}},{"name":"proxyllm_usage","title":"30-day usage summary","description":"GET /v1/organizations/usage for the account.","inputSchema":{"type":"object","properties":{"account_token":{"type":"string"}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"execution":{"taskSupport":"forbidden"}}]},"jsonrpc":"2.0","id":2} stderr: