{"openapi":"3.1.0","info":{"title":"AutoRFP.ai Agent API","version":"1.0.0","description":"Discovery and MCP access for AutoRFP.ai. Public discovery operations require no credentials. The MCP endpoint is read-only and applies the user permissions from the authorized AutoRFP.ai workspace."},"servers":[{"url":"https://autorfp.ai","description":"Public AutoRFP.ai discovery endpoints"}],"tags":[{"name":"Discovery","description":"Public machine-readable resources for agents and API clients."},{"name":"MCP","description":"The authenticated AutoRFP.ai Model Context Protocol endpoint."}],"paths":{"/api/agent-resources.json":{"get":{"operationId":"getAgentResources","summary":"List AutoRFP.ai agent resources","description":"Returns canonical links for API documentation, OpenAPI, llms.txt, the sitemap, OAuth metadata, and the MCP server.","tags":["Discovery"],"security":[],"responses":{"200":{"description":"Canonical agent resource links.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentResources"}}}}}}},"/.well-known/mcp.json":{"get":{"operationId":"getMcpServerDiscovery","summary":"Discover the AutoRFP.ai MCP server","description":"Returns the public MCP server name, description, icon, and Streamable HTTP endpoint.","tags":["Discovery"],"security":[],"responses":{"200":{"description":"MCP server discovery metadata.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/McpDiscovery"}}}}}}},"/.well-known/oauth-authorization-server":{"servers":[{"url":"https://api.autorfp.ai","description":"AutoRFP.ai API for the AU region"}],"get":{"operationId":"getOAuthAuthorizationServerMetadata","summary":"Read OAuth authorization server metadata","description":"Returns RFC 8414 authorization, token, registration, revocation, grant, PKCE, and scope metadata.","tags":["Discovery"],"security":[],"responses":{"200":{"description":"OAuth 2.0 authorization server metadata.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/.well-known/oauth-protected-resource/mcp":{"servers":[{"url":"https://api.autorfp.ai","description":"AutoRFP.ai API for the AU region"}],"get":{"operationId":"getMcpProtectedResourceMetadata","summary":"Read MCP protected resource metadata","description":"Returns RFC 9728 resource, authorization server, and supported OAuth scope metadata.","tags":["Discovery"],"security":[],"responses":{"200":{"description":"OAuth 2.0 protected resource metadata for the MCP endpoint.","content":{"application/json":{"schema":{"type":"object","required":["resource","authorization_servers","scopes_supported"],"properties":{"resource":{"type":"string","format":"uri"},"authorization_servers":{"type":"array","items":{"type":"string","format":"uri"}},"scopes_supported":{"type":"array","items":{"type":"string"}}}}}}}}}},"/mcp":{"servers":[{"url":"https://api.autorfp.ai","description":"AutoRFP.ai API for the AU region"},{"url":"https://api.us.autorfp.ai","description":"AutoRFP.ai API for the US region"},{"url":"https://api.eu.autorfp.ai","description":"AutoRFP.ai API for the EU region"}],"post":{"operationId":"sendMcpRequest","summary":"Send a Model Context Protocol request","description":"Sends one JSON-RPC 2.0 message to the AutoRFP.ai Streamable HTTP MCP endpoint. Initialize the connection, discover tools, then call only the read tools allowed by the granted OAuth scopes.","tags":["MCP"],"security":[{"oauth2":["tags:read","projects:read","content:read"]}],"parameters":[{"name":"MCP-Protocol-Version","in":"header","required":true,"description":"Model Context Protocol version used by the client.","schema":{"type":"string","examples":["2025-11-25"]}},{"name":"Accept","in":"header","required":true,"description":"Streamable HTTP response formats accepted by the client.","schema":{"type":"string","const":"application/json, text/event-stream"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcRequest"}}}},"responses":{"200":{"description":"A JSON-RPC response or server-sent event stream.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcResponse"}},"text/event-stream":{"schema":{"type":"string"}}}},"202":{"description":"The notification or response was accepted and has no response body."},"400":{"description":"Malformed protocol request. Correct the JSON-RPC payload or MCP headers and retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid bearer token. Read the protected resource metadata, complete OAuth authorization, and retry with the granted scopes.","headers":{"WWW-Authenticate":{"description":"Bearer challenge with the protected resource metadata URL.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The token lacks a required scope or the user lacks access to the requested workspace row.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"oauth2":{"type":"oauth2","description":"Authorization Code with PKCE. Access remains limited by the authorized user permissions.","flows":{"authorizationCode":{"authorizationUrl":"https://api.autorfp.ai/authorize","tokenUrl":"https://api.autorfp.ai/token","refreshUrl":"https://api.autorfp.ai/token","scopes":{"tags:read":"Read the workspace tag vocabulary.","projects:read":"Read projects and their requirements.","content:read":"Search and read approved content and its usage."}}}}},"schemas":{"AgentResources":{"type":"object","required":["product","description","documentation","openapi","llms","sitemap","mcp"],"properties":{"product":{"type":"string"},"description":{"type":"string"},"documentation":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"},"llms":{"type":"string","format":"uri"},"sitemap":{"type":"string","format":"uri"},"mcp":{"type":"object","required":["transport","endpoint","discovery","scopes"],"properties":{"transport":{"type":"string","const":"streamable-http"},"endpoint":{"type":"string","format":"uri"},"discovery":{"type":"string","format":"uri"},"authorizationServerMetadata":{"type":"string","format":"uri"},"protectedResourceMetadata":{"type":"string","format":"uri"},"scopes":{"type":"array","items":{"type":"string"}}}}}},"McpDiscovery":{"type":"object","required":["name","description","icon","endpoint"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"icon":{"type":"string","format":"uri"},"endpoint":{"type":"string","format":"uri"}}},"JsonRpcRequest":{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"oneOf":[{"type":"string"},{"type":"integer"}]},"method":{"type":"string","description":"MCP method such as initialize, tools/list, or tools/call."},"params":{"type":"object","additionalProperties":true}},"additionalProperties":false},"JsonRpcResponse":{"type":"object","required":["jsonrpc"],"properties":{"jsonrpc":{"type":"string","const":"2.0"},"id":{"oneOf":[{"type":"string"},{"type":"integer"},{"type":"null"}]},"result":{},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"integer"},"message":{"type":"string"},"data":{}}}}},"Error":{"type":"object","required":["error","error_description"],"properties":{"error":{"type":"string","description":"Stable machine-readable error code.","examples":["invalid_token"]},"error_description":{"type":"string","description":"Human-readable explanation with enough detail to resolve the request.","examples":["Missing Authorization header"]}},"additionalProperties":true}}}}