openai-decisions-mcp
Integrates with OpenAI's Decisions API to classify, filter, and score text, project files, images, and PDF pages. Provides tools for evaluating shared evidence against independent questions, batch evaluation of multiple items, and locating relevant code ranges in candidate files without returning their contents.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@openai-decisions-mcp does src/auth.ts implement login or session validation?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
openai-decisions-mcp
Local MCP tools for OpenAI's Decisions API: classify, filter, and score text, project files, images, and PDF pages. Independent community project; not affiliated with OpenAI. MIT licensed.
Install
Requires Node.js 22.13+ (Node 24 recommended). npm distribution: npx -y openai-decisions-mcp. Alternatively, clone this repository, run npm ci && npm run build, and use node /absolute/path/openai-decisions-mcp/dist/cli.js instead.
Supply OPENAI_API_KEY through the server environment, or put it in a private environment file outside the repository (Unix: chmod 600) and pass --env-file /absolute/path/credentials.env. ChatGPT OAuth/subscriptions are not used. The server never reads other apps' credentials.
codex mcp add openai-decisions -- npx -y openai-decisions-mcp --env-file /absolute/path/credentials.env
claude mcp add --scope user --transport stdio openai-decisions -- npx -y openai-decisions-mcp --env-file /absolute/path/credentials.envRestart the client session after registration. Install the bundled skills/openai-decisions folder into ~/.codex/skills/ and/or ~/.claude/skills/; when installing from npm, find it inside the installed package. The skill guides usage; it does not force every judgment through this tool.
Related MCP server: helix-mcp-knowledge
Tools
decide({sources,questions,full?}) evaluates shared evidence against independent questions. evaluate_batch({items:[{id,sources}],questions,full?}) applies the same questions independently to up to 20 items. Each valid item makes one paid request; up to 3 evaluations run concurrently per server process. No automatic retries or successful-item replay. Top-level array arguments also accept a JSON-encoded array string for client compatibility; both forms receive identical validation. Missing questions or evidence remain errors.
{"sources":[{"type":"file","path":"src/auth.ts"}],"questions":[{"name":"relevant","type":"predicate","instructions":"Does this source implement login or session validation?"}]}Source types: {type:"text",text}, {type:"file",path,start_line?,end_line?}, {type:"image",path}, {type:"pdf",path,pages?,mode?}. Text files are UTF-8; images are PNG/JPEG/WebP. Lines/pages are one-based. root optionally selects an already-authorized root for relative file paths. Combine sources to provide evidence and criteria together.
Questions have unique name, instructions, and type: predicate returns a probability; choice takes choices:[{value,description?}] (string/boolean values); score takes ordered levels:[{label,description?}] and returns a fractional zero-based index. Use 1–100 questions, 2–100 choices/levels. No fixed categories, thresholds, or action policy are imposed.
Compact results include answers, confidence where supplied, token usage, upstream latency, and coverage. full:true additionally retains every option's probability and usage details. Refusals stay refusals. Batch errors are returned by item ID in input order. No input text is echoed. Probabilities are model judgments, not proof or authorization.
find_code({files:[{path,root?,start_line?,end_line?}],query}) locates relevant ranges in candidate files without returning their contents. List candidate paths with your normal file tools first. It evaluates all 200-line chunks with 20-line overlap, returning every probability, refusal, error, location and SHA-256 of the selected UTF-8 text with CRLF normalized to LF. Maximum 20 chunks and 1 MiB total selected text; oversized scopes fail before paid calls. Each chunk is one paid request. No directory crawling, hidden filtering, or automatic Read interception. Chunk results do not establish cross-file behavior or prove absence; read surrounding code/dependencies before acting. Each call sees only its supplied evidence, not earlier calls or the host conversation.
Files and PDFs
The current project is automatic: MCP Roots take precedence; without Roots, the server uses --root, CLAUDE_PROJECT_DIR, then its startup working directory. Roots changes revoke previous project access. --allow-root PATH adds explicit external folders. With multiple project roots, use absolute paths or select an authorized root. Roots failure/empty Roots disables project-file access while preserving explicit extra roots and direct text input. File paths cannot grant access themselves; symlink escapes are rejected. This is application-level checking, not an OS sandbox against concurrent filesystem mutation.
PDF auto extracts each selected page's text and renders pages without text. visual renders every selected page for layout, tables, and diagrams; text rejects textless pages. Auto does not detect every mixed text/image layout—choose visual when appearance matters. PDF.js and the packaged canvas dependency perform local processing without a system PDF application. Encrypted PDFs must be decrypted separately. No Office document conversion or URL fetching.
Limits per evaluation: 20 sources, 20 MiB per file, 1 MiB extracted/direct text, 20 PDF pages, 128 image parts, 24 MiB serialized request. Raster pages are at most 2048 pixels on the longest side and 2× PDF scale. A PDF worker has a 256 MiB JS heap limit and a 20-second deadline; native allocations are not included in the heap limit. Evaluations have a 60-second deadline including queue time. Batches have a 120-second overall deadline; set client timeout to at least 180 seconds. Oversized inputs fail rather than truncate; choose explicit ranges. Coverage identifies selected scope, not whether evidence is sufficient to answer a question.
Selected content goes to https://api.openai.com/v1/decisions using gpt-6-luna. No server-side content/key logging or persistent conversion files. Clients may retain tool arguments/results. API errors are redacted, redirects rejected, and failed/timed-out requests are not replayed automatically. Read-only tools still transmit data and incur API charges.
Verify and develop
npm test builds and runs offline file/PDF/schema/concurrency/cancellation and MCP protocol tests. npm pack --dry-run checks distribution contents. CI covers Node 22/24 on Linux/macOS/Windows. A green local run does not establish results on other platforms.
OPENAI_API_KEY=... npm run smoke runs a paid synthetic live MCP request. OPENAI_API_KEY=... npm run benchmark compares direct host classification with a real host function-call → MCP → Decisions → host path, including argument/result tokens. BENCHMARK_MODEL defaults to gpt-6.1-sol. It reports correctness, separate host/Decisions usage, and elapsed time—not an assumed savings percentage. Actual live results require a working key; no general token-savings claim is made.
References: OpenAI Decisions, MCP Roots. Design references: ask-jev (generic typed questions), mcp-server-jev (batch/error boundaries), jev-mcp (usage guidance). Jev inspired returning code locations instead of full contents. Implementation is independent; Jev-specific schemas, thresholds, and routing policies are not copied.
Available Tools
3 toolsdecideARead-only
Evaluate text, project files, images or PDF pages against caller-defined predicate, choice or score questions. Batch independent questions about shared evidence. Use paths instead of copying files. Returns compact answers and coverage; full=true includes all probabilities. Makes a paid OpenAI API request.
Inputs: sources (required), questions (required), full.
evaluate_batchARead-only
Apply common typed questions independently to up to 20 named items, each containing text or file/image/PDF sources. At most 3 evaluations run concurrently. Returns per-item results/errors in input order; never replays successful items. Paid requests: one per valid item. Caller chooses the criteria and subsequent selection.
Inputs: items (required), questions (required), full.
find_codeARead-only
Locate relevant code within caller-supplied project files or line ranges. Evaluates every 200-line chunk with 20-line overlap, returns paths/ranges and relevance probabilities without code text. Discover candidate paths with your normal file listing first. Maximum 20 chunks and 1 MiB total text; oversized scopes fail before any paid call. One paid request per chunk, up to 3 concurrently. Returns every result, refusal and error; no automatic filtering or Read hook. Independent chunks cannot establish cross-file behavior.
Inputs: files (required), query (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 3 tools
find_code is clearly distinct, but decide and evaluate_batch both perform batched paid OpenAI evaluations over text/files/images/PDFs. The distinction between multiple questions on shared evidence vs. common questions across many named items is useful but subtle enough that an agent could misselect.
All names use lowercase snake_case and start with an imperative verb, giving a mostly predictable pattern. decide is a bare verb while evaluate_batch and find_code include an object noun, which is a minor inconsistency.
Three tools is compact and each covers a meaningful operation, fitting the server's focused evaluation purpose. The slight overlap between decide and evaluate_batch keeps it from being a perfectly scoped set.
The surface covers single/batched evaluation across text, files, images, PDFs, and code relevance search, which is solid for an OpenAI decision/evaluation server. Minor gaps include reliance on external file listing for code discovery and no built-in project/file inventory.
Maintenance
Related MCP Connectors
Read-only AgentiScript concept search, catalog, authenticity, license, and approved asset discovery.
Authenticated public evidence search, verification, research jobs, exports, and webhooks.
Evidence-readiness MCP server: validate, audit, and score briefs, memos, and evidence packs.
Query Klaaro datasets, documents, and extracted records from any agent.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables local read-only search and retrieval of approved, current evidence via hybrid lexical and dense methods, with tools to get exact source spans, answer from cited passages, and create and verify recheckable evidence packets.MIT
- AlicenseAqualityBmaintenanceEnables evidence-based retrieval across official BMC Helix product documentation and isolated private project knowledge, with product, version, project, source, and section provenance. Supports version-aware multi-product indexing, hybrid lexical and optional semantic search, and read-only access to local evidence without touching live Helix systems.9MIT
- AlicenseAqualityCmaintenanceEnables MCP agents to evaluate content against typed questions (yes/no, choice, or score) in a single parallel call.139 npmApache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to ask questions over the indexed document corpus and search handbook passages, returning cited answers and ranked results.MIT