Repository Public Research preview
1{2 "schemaVersion": "1.0",3 "name": "@spboucher/openai-api-mcp",4 "version": "1.0.1",5 "type": "mcp-server",6 "description": "MCP server for building with the OpenAI API: probe-verified model reference, request linter for Responses and Chat Completions, cost estimates, scaffolding, plus live responses, embeddings, batches, files, vector stores, speech and images.",7 "license": "MIT",8 "keywords": [9 "openai",10 "gpt",11 "responses-api",12 "mcp",13 "agents",14 "linter",15 "cost",16 "embeddings"17 ],18 "compatibility": [19 "claude-code",20 "codex",21 "cursor",22 "generic-mcp"23 ],24 "permissions": [25 "network",26 "env",27 "filesystem:read",28 "filesystem:write",29 "shell"30 ],31 "mcp": {32 "transport": "stdio",33 "command": "node",34 "args": [35 "server.mjs"36 ],37 "env": [38 {39 "name": "OPENAI_API_KEY",40 "description": "OpenAI API key. Needed only by the live tools; offline tools work without it.",41 "required": false,42 "secret": true43 },44 {45 "name": "OPENAI_API_MCP_MAX_OUTPUT_TOKENS",46 "description": "Spend guard: largest output cap the server will send (default 32000).",47 "required": false,48 "secret": false49 },50 {51 "name": "OPENAI_API_MCP_FILE_ROOT",52 "description": "Only directory the file, speech and image tools may read from or write to (default: working directory).",53 "required": false,54 "secret": false55 }56 ],57 "tools": [58 {59 "name": "model_reference",60 "description": "Probe-verified facts about OpenAI text models (offline)"61 },62 {63 "name": "recommend_model",64 "description": "Pick a model and reasoning effort for a task (offline)"65 },66 {67 "name": "lint_request",68 "description": "Check a Responses or Chat Completions request against what the API accepts (offline)"69 },70 {71 "name": "fix_request",72 "description": "Apply mechanical fixes to a request (offline)"73 },74 {75 "name": "migrate_request",76 "description": "Rewrite a request for another model (offline)"77 },78 {79 "name": "chat_to_responses",80 "description": "Convert Chat Completions to the Responses API (offline)"81 },82 {83 "name": "estimate_cost",84 "description": "Cost from token counts with caching, batch, fast and long-context rates (offline)"85 },86 {87 "name": "compare_costs",88 "description": "Rank models by cost for a workload (offline)"89 },90 {91 "name": "scaffold_app",92 "description": "Runnable starter code in TypeScript or Python (offline)"93 },94 {95 "name": "explain_error",96 "description": "Explain an API error and its fix (offline)"97 },98 {99 "name": "feature_guide",100 "description": "Concise guidance per API feature (offline)"101 },102 {103 "name": "list_models",104 "description": "Models visible to the key, by kind (live)"105 },106 {107 "name": "count_tokens",108 "description": "Exact input-token count (live, free)"109 },110 {111 "name": "create_response",112 "description": "Send a request, linted first (live, billed)"113 },114 {115 "name": "extract_structured",116 "description": "JSON matching a schema (live, billed)"117 },118 {119 "name": "get_response",120 "description": "Retrieve a stored or background response"121 },122 {123 "name": "cancel_response",124 "description": "Cancel a background response (confirmation required)"125 },126 {127 "name": "delete_response",128 "description": "Delete a stored response (confirmation required)"129 },130 {131 "name": "create_embeddings",132 "description": "Embeddings with similarity matrix (live, billed)"133 },134 {135 "name": "moderate",136 "description": "Moderation classification (live, free)"137 },138 {139 "name": "batch_create",140 "description": "Submit a batch; builds and uploads the JSONL (live, billed)"141 },142 {143 "name": "batch_get",144 "description": "Batch status"145 },146 {147 "name": "batch_list",148 "description": "Recent batches"149 },150 {151 "name": "batch_results",152 "description": "Batch results keyed by custom_id"153 },154 {155 "name": "batch_cancel",156 "description": "Cancel a batch (confirmation required)"157 },158 {159 "name": "file_upload",160 "description": "Upload a file"161 },162 {163 "name": "file_list",164 "description": "List files"165 },166 {167 "name": "file_get",168 "description": "File metadata"169 },170 {171 "name": "file_delete",172 "description": "Delete a file (confirmation required)"173 },174 {175 "name": "vector_store_create",176 "description": "Create a vector store for retrieval"177 },178 {179 "name": "vector_store_add",180 "description": "Add and index a document"181 },182 {183 "name": "vector_store_search",184 "description": "Semantic search over a vector store"185 },186 {187 "name": "vector_store_list",188 "description": "List vector stores"189 },190 {191 "name": "vector_store_delete",192 "description": "Delete a vector store (confirmation required)"193 },194 {195 "name": "text_to_speech",196 "description": "Synthesize speech to a local file (billed)"197 },198 {199 "name": "transcribe_audio",200 "description": "Transcribe a local audio file (billed)"201 },202 {203 "name": "generate_image",204 "description": "Generate an image to a local file (billed)"205 }206 ]207 },208 "examples": [209 {210 "title": "Lint a Responses request, then send the corrected one (Claude Code)",211 "client": "claude-code",212 "image": "examples/claude-code.png",213 "alt": "Terminal screenshot of a Claude Code session using openai-api-mcp: the prompt, the tool or script calls, and the agent's answer.",214 "prompt": "With the openai-api MCP tools: (1) lint this Responses API request and list what the API would reject: model gpt-6, temperature 0.7, max_output_tokens 8, input 'hi'. (2) Send a corrected request live with the input 'Reply with the single word ready' and report the reply, the token usage and the cost. Answer in at most 10 lines.",215 "caption": "The linter rejects the unknown model id and the too-small output cap; a corrected request is sent live and its usage and cost reported. Real session, Claude Code 2.1.322 with Fable 5.2, with version 1.0.0 installed from this registry; inputs are test fixtures.",216 "capturedAt": "2026-11-10"217 },218 {219 "title": "Lint a Responses request, then send the corrected one (Codex)",220 "client": "codex",221 "image": "examples/codex.png",222 "alt": "Terminal screenshot of a Codex session using openai-api-mcp: the prompt, the tool or script calls, and the agent's answer.",223 "prompt": "With the openai-api MCP tools: (1) lint this Responses API request and list what the API would reject: model gpt-6, temperature 0.7, max_output_tokens 8, input 'hi'. (2) Send a corrected request live with the input 'Reply with the single word ready' and report the reply, the token usage and the cost. Answer in at most 10 lines.",224 "caption": "The linter rejects the unknown model id and the too-small output cap; a corrected request is sent live and its usage and cost reported. Real session, Codex CLI 0.167.1 with GPT-6.1-Sol, with version 1.0.0 installed from this registry; inputs are test fixtures.",225 "capturedAt": "2026-11-10"226 }227 ]228}229