flexorch-mcp
OfficialThis server connects MCP-compatible AI agents to the FlexOrch document intelligence platform, enabling end-to-end document processing, data extraction, and dataset export through natural language tool calls. It provides 6 tools:
document.process: Upload and process documents (PDF, DOCX, TXT, XLSX, HTML, XML, EML, JPG, PNG, TIFF) from a public URL — performs automatic classification, structured field extraction, PII detection/masking, and quality scoring.job.status: Monitor asynchronous processing jobs (document processing or dataset builds) until they complete or fail.job.result: Retrieve structured extraction results from a completed job, including document type, detected language, quality grade (A–D), PII summary, and extracted field values.dataset.build: Package extracted records from a completed document execution into a named, structured dataset.dataset.search: Search across indexed datasets using structured, semantic, or hybrid modes, with filtering by document type, language, and quality grade. Semantic/hybrid modes require a Pro+ plan.dataset.export: Export a complete dataset as JSONL, CSV, JSON, Markdown, XML, or RAG chunks (LangChain/LlamaIndex compatible) for LLM fine-tuning or downstream use.
Allows OpenAI Codex to process documents, extract structured data, detect PII, and export datasets via MCP tools.
Click on "Install 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., "@flexorch-mcpProcess the latest invoice PDF and extract vendor name and total amount."
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.
flexorch-mcp
MCP server for FlexOrch — SDK for machines.
Connect Claude and other MCP-compatible agents to the FlexOrch document intelligence pipeline. Process documents, extract structured data, detect PII, and export LLM-ready datasets — all through natural language tool calls.
What this is
flexorch-mcp is a thin proxy that exposes the FlexOrch API as MCP tools. All processing happens on FlexOrch's managed infrastructure. A FlexOrch account and API key are required.
For humans writing code: use flexorch-sdk (Python) or flexorch-sdk-js (TypeScript).
For agents: use this package.
Related MCP server: Enterprise Knowledge MCP Server
Tools
Tool | Description |
| Upload and process a document (PDF, DOCX, TXT, XLSX, HTML, XML, EML, JPG, PNG, TIFF) |
| Re-queue an already-uploaded document through the pipeline |
| Poll a processing job until completed or failed |
| Get structured extracted fields from a completed job |
| Build a structured dataset from a completed execution |
| Semantic search across indexed datasets (Pro+) |
| Export a dataset as JSONL, CSV, JSON, XML, MD, or RAG (LangChain/LlamaIndex chunks) |
| Trigger semantic vector indexing for a dataset (Pro+) |
| Retrieve paginated RAG-ready text chunks from an indexed dataset (Pro+) |
Installation
pip install flexorch-mcpRequires Python 3.10+.
Configuration
Claude Desktop
Add to your Claude Desktop config file (create it if it doesn't exist):
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"flexorch": {
"command": "flexorch-mcp",
"env": {
"FLEXORCH_API_KEY": "dfx_your_key_here"
}
}
}
}Cursor
Add to your Cursor MCP config:
{
"flexorch": {
"command": "flexorch-mcp",
"env": {
"FLEXORCH_API_KEY": "dfx_your_key_here"
}
}
}OpenAI Codex
Add to ~/.codex/config.toml:
[mcp_servers.flexorch]
command = "uvx"
args = ["flexorch-mcp"]
[mcp_servers.flexorch.env]
FLEXORCH_API_KEY = "dfx_your_key_here"Get your API key from app.flexorch.com/settings.
Verify connection
flexorch-mcp --check
# → FlexOrch API key: dfx_xxx*** ✓
# → Connection: OK (api.flexorch.com)
# → Plan: Starter (1,200 credits/mo)
# → Tools: 9 registeredExample agent workflow
User: "Process this invoice and export it as JSONL for fine-tuning."
Agent:
1. document.process(file_url="https://...") → job_id: 1234
2. job.status(1234) → completed, execution_id: 567
3. job.result(567) → vendor, total, date, PII masked
4. dataset.build(execution_id=567) → job_id: 1235
5. job.status(1235) → completed, dataset_id: 89
6. dataset.export(89, format="jsonl") → inline JSONL contentPlan limits
All FlexOrch plan limits apply to MCP tool calls. Credits are consumed per document processed.
Plan | Credits/mo | Semantic search |
Trial | 1,200 (30 days) | — |
Starter | 1,200 | — |
Pro | 6,000 | ✓ |
Enterprise | Custom | ✓ |
Security
API key is read from the
FLEXORCH_API_KEYenvironment variable — never passed as a tool argumentNo data is stored or cached by this server — stateless proxy
PII masking is applied by FlexOrch's pipeline before results are returned
All communication with
api.flexorch.comuses HTTPS
Related
flexorch-audit — Standalone PII detection and document quality scoring (no account required)
flexorch-sdk — Python SDK for developers
flexorch-sdk-js — TypeScript SDK for developers
docs.flexorch.com — Full documentation
License
MIT — see LICENSE.
Available Tools
8 toolsdataset.buildBuild DatasetA
Package extracted records into a dataset for export (Step 4).
Triggers an async dataset build from a completed execution. Returns a job_id immediately — poll with job.status until status='completed'. The completed response includes dataset_id, which you pass to dataset.export to retrieve all records as text. This step is required before calling dataset.export.
Args: execution_id: Execution ID from a completed data_process job (from job.status or job.result). name: Dataset name. Auto-generated from the source filename if omitted. description: Optional description for this dataset.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| description | No | ||
| execution_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| job_id | No | |
| status | No | |
| isError | No | |
| poll_hint | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral detail beyond the annotations: it reveals that the build is asynchronous ('Returns a job_id immediately — poll with job.status until status='completed'), explains the response includes a dataset_id, and describes the required workflow. Annotations only indicate non-readonly and non-destructive, but the description enriches this with async nature and polling instructions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (around 10 lines) and well-structured: a one-sentence summary, followed by behavioral notes, then an Args section. Every sentence provides essential information. The structure is front-loaded with the core purpose and step number, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all necessary aspects for a tool in a workflow: prerequisites (completed execution), side effects (async build, dataset created), return value (job_id), and next steps (poll and then export). Given the presence of an output schema, the description does not need to detail return format. It provides a complete context for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing detailed semantics for all parameters: execution_id is from a completed data_process job, name is auto-generated from filename if omitted, description is optional. This adds crucial context absent from the schema, making parameter usage clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Package extracted records into a dataset for export (Step 4)'. It specifies the action (build), the resource (dataset), and its role in a multi-step workflow. It distinguishes itself from sibling tools like dataset.export and job.status by explaining that this step is required before export and that the returned job_id must be polled.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Triggers an async dataset build from a completed execution.' It states the prerequisite (completed execution) and the subsequent step ('This step is required before calling dataset.export'). It also tells the user to poll job.status until complete, offering a clear usage pattern. No alternative tools needed for this specific step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dataset.chunksList RAG ChunksARead-onlyIdempotent
Retrieve LangChain/LlamaIndex-ready text chunks from an indexed dataset (Pro+ plan).
Returns paginated RAG chunks. Each chunk includes text, token count, and metadata (quality grade, PII masking status, document type, language). Use FlexOrchRetriever or FlexOrchReader from the flexorch-sdk for automatic pagination. The dataset must be indexed first via dataset.index(dataset_id).
Args: dataset_id: ID of the indexed dataset. min_quality: Minimum quality grade to include: A, B, C, or D. Default: B. Chunks with grade at or above this threshold are returned. Example: "B" returns grade A and B chunks. pii_masked_only: When true, return only chunks where PII was masked. Default: false. page: Page number, 1-indexed. Default: 1. page_size: Chunks per page, max 100. Default: 20.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| page_size | No | ||
| dataset_id | Yes | ||
| min_quality | No | B | |
| pii_masked_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | No | |
| error | No | |
| total | No | |
| chunks | No | |
| isError | No | |
| has_more | No | |
| page_size | No | |
| dataset_id | No | |
| chunk_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: returns paginated chunks with fields (text, token count, metadata including quality grade, PII masking status, document type, language), explains the min_quality threshold behavior, and notes the indexing prerequisite. This complements the readOnlyHint and idempotentHint annotations without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized: a concise summary sentence followed by return details and a structured Args list. Every sentence adds value, and the length is appropriate given the 5 parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, prerequisites, parameter semantics, return content, and pagination guidance. With annotations and an output schema present, this is fully actionable for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by documenting every parameter in the Args section, including defaults, allowed values, and an example for min_quality. This provides meaning far beyond the raw schema properties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Retrieve LangChain/LlamaIndex-ready text chunks from an indexed dataset.' This specific verb+resource+scope distinguishes it from siblings like dataset.search and dataset.export.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: Pro+ plan restriction, the prerequisite that the dataset must be indexed via dataset.index(), and guidance to use FlexOrchRetriever/Reader for automatic pagination. However, it does not explicitly mention when not to use this tool or directly contrast with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dataset.exportExport DatasetARead-onlyIdempotent
Download all records from a built dataset as text (Step 5 — final step).
Returns the complete dataset content as a UTF-8 string directly in the response — no file download or separate URL needed. Call get_job_status after build_dataset and wait for status='completed' before calling this tool. Use the dataset_id from that completed response.
Format guide: jsonl = LLM fine-tuning, rag = LangChain/LlamaIndex chunks, csv = spreadsheets, md = human-readable, xml = structured interchange. Binary formats (parquet, hf) cannot be returned via MCP — export them from the FlexOrch dashboard directly.
Args: dataset_id: Dataset ID from the get_job_status completed build response. format: Text export format — jsonl, csv, json, md, xml, rag. Default: jsonl.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | jsonl | |
| dataset_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| format | No | |
| content | No | |
| isError | No | |
| filename | No | |
| byte_count | No | |
| dataset_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint (safe read). Description adds key behavioral details: returns content as UTF-8 string directly, no file download, and binary format limitations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Efficient single paragraph that front-loads core purpose, then logically covers response format, prerequisites, format guide, and limitations. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given tool complexity and existing output schema, description fully covers prerequisites, parameter usage, format options, and limitations. No missing information for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, description thoroughly explains both parameters: format (lists each format's use case) and dataset_id (source from completed build). Go beyond schema defaults and types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool's purpose: 'Download all records from a built dataset as text (Step 5 — final step).' It distinctively identifies itself as the retrieval step after building, distinguishing from sibling tools like dataset.build and job.status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides prerequisites: call get_job_status after build_dataset, wait for status='completed', and use dataset_id from that response. Also advises when not to use (binary formats) and directs to dashboard alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dataset.indexIndex Dataset for RAGAIdempotent
Trigger semantic indexing for a dataset — required before using dataset.chunks (Pro+ plan).
Starts an async indexing job that splits the dataset into RAG-ready text chunks, generates embeddings, and stores them for semantic search. Indexing is idempotent: calling it again on an already-indexed dataset re-indexes with fresh embeddings. Indexing typically completes in 10–60 seconds depending on dataset size. After indexing, use dataset.chunks(dataset_id) to retrieve the text chunks.
Args: dataset_id: ID of the built dataset to index (from job.status after dataset.build).
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| status | No | |
| isError | No | |
| message | No | |
| dataset_id | No | |
| index_hint | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the idempotentHint annotation, the description reveals async behavior, internal steps (splitting, embedding, storing), typical completion time (10–60 seconds), and the effect of re-indexing with fresh embeddings. This adds substantial context not captured in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a one-sentence summary, followed by concise behavioral details and a clear Args section. Every sentence adds value, and the structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, an output schema, and a clear description of the operation, the tool is fully specified. It covers prerequisites, async nature, idempotency, and the relationship to sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only specifies an integer dataset_id, but the description adds the source and meaning: 'ID of the built dataset to index (from job.status after dataset.build).' This provides exactly the necessary context for the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the verb 'Trigger semantic indexing' and the resource 'dataset', distinguishing it from siblings like dataset.build and dataset.chunks. It also notes it is required before using dataset.chunks, which clarifies its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states when to use: 'required before using dataset.chunks (Pro+ plan)' and the post-condition 'After indexing, use dataset.chunks(dataset_id).' It also references the prerequisite from job.status after dataset.build, giving a clear workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dataset.searchSearch DocumentsARead-onlyIdempotent
Search across all indexed FlexOrch datasets by keyword or meaning.
Use this to find specific documents or records without processing a new file. Requires at least one dataset to exist. Structured search works on all plans. Semantic and hybrid modes require a Pro plan — a clear upgrade message is returned if the plan is insufficient. mode='auto' picks structured on free plans, hybrid on Pro+.
Args: query: Search query — natural language or keyword. Max 1000 characters. top_k: Number of results to return. Default: 5, max: 50. mode: Search strategy — auto (default), structured, semantic, hybrid. semantic and hybrid require Pro plan. document_type: Filter to a specific document type, e.g. invoice (optional). language: Filter by document language, ISO 639-1 code, e.g. en, de, tr (optional). quality_grade: Filter by quality grade: A, B, C, or D (optional).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | auto | |
| query | Yes | ||
| top_k | No | ||
| language | No | ||
| document_type | No | ||
| quality_grade | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| error | No | |
| query | No | |
| isError | No | |
| results | No | |
| total_results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and idempotentHint=true, so safety is clear. The description adds behavioral context like requiring an existing dataset, plan-based mode restrictions, and a clear upgrade message for insufficient plans. This enriches transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a front-loaded purpose sentence and an organized Args block. It is informative without unnecessary verbosity, though slight tightening could improve conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (6 params, plan restrictions, and preconditions) and the presence of an output schema, the description covers all essential aspects: purpose, usage guidance, parameter details, plan dependencies, and return value expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the Description's Args block thoroughly explains each parameter, including defaults, max values, options, and plan dependencies for mode. This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search across all indexed FlexOrch datasets by keyword or meaning.' It uses a specific verb (Search) and resource (datasets), and distinguishes from sibling tools like dataset.build or document.process.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises when to use ('to find specific documents or records without processing a new file') and mentions prerequisites ('Requires at least one dataset to exist'). It also details plan restrictions for modes, though lacks explicit 'when not to use' beyond plan limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
document.processProcess DocumentA
Submit a document for processing — this is always the first step (Step 1 of 5).
Downloads the file from file_url, then submits it to FlexOrch for automatic classification, structured field extraction, PII detection/masking, and quality scoring. Processing is asynchronous — this tool returns immediately with a job_id. You MUST call job.status(job_id) every 3–5 seconds until status='completed' before calling job.result.
Args: file_url: Publicly accessible URL of the document (http/https only, max 50 MB). Supported: PDF, DOCX, TXT, XLSX, HTML, XML, EML, JPG, PNG, TIFF. mask_pii: Replace detected PII (names, IDs, emails, phone numbers) with [MASKED_TYPE] placeholders in all output. Default: true. document_type: Optional classification hint — FlexOrch auto-detects if omitted. Values: invoice, expense_report, purchase_order, sales_proposal, bank_statement, payroll.
| Name | Required | Description | Default |
|---|---|---|---|
| file_url | Yes | ||
| mask_pii | No | ||
| document_type | No | auto |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| job_id | No | |
| status | No | |
| isError | No | |
| poll_hint | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses asynchronous processing, immediate return with job_id, and the need for polling. Annotations (readOnlyHint=false, destructiveHint=false) are consistent; the description adds critical behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections and bullet points for args, but slightly verbose. Could be tightened without losing clarity, but still effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all necessary context: tool purpose, async flow, polling instructions, prerequisites, and supported formats. With an output schema present, lack of return description is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema coverage, the description fully explains each parameter: file_url (public URL, max 50MB, formats), mask_pii (masking behavior, default true), document_type (optional hint, list of values). This compensates completely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Submit a document for processing — this is always the first step (Step 1 of 5).' It details the pipeline (download, FlexOrch classification, extraction, PII masking, quality scoring) and distinguishes itself from sibling tools like job.status and job.result.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance to use as the first step and instructs the agent to call job.status every 3-5 seconds then job.result. It also lists supported file types and constraints, leaving no ambiguity about when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job.resultGet Extraction ResultARead-onlyIdempotent
Read structured fields extracted from a completed document (Step 3).
Use the execution_id from a completed data_process job (job.status response). Returns document type, detected language, quality grade (A–D), PII summary, column list, and extracted field values. If no dataset has been built yet, the response includes a fields_hint guiding you to call dataset.build next. To retrieve all rows as a file, proceed to dataset.build → dataset.export.
Note: Masked fields appear as [MASKED_TYPE] placeholders — raw PII is never returned. Note: execution_id comes from data_process jobs only; dataset_build jobs use dataset_id.
Args: execution_id: Execution ID from the job.status completed response.
| Name | Required | Description | Default |
|---|---|---|---|
| execution_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| fields | No | |
| columns | No | |
| isError | No | |
| privacy | No | |
| quality | No | |
| degraded | No | |
| has_more | No | |
| row_count | No | |
| fields_hint | No | |
| execution_id | No | |
| document_type | No | |
| has_more_hint | No | |
| detected_language | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and idempotent hints, and the description adds critical behavioral context: masked fields appear as [MASKED_TYPE] placeholders and raw PII is never returned. It also discloses the conditional fields_hint field, giving the agent a clearer picture of what to expect in the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but well-organized with notes and an Args section. It front-loads the main purpose and every sentence provides value. Minor redundancy exists between 'completed document' and 'completed data_process job', but the overall structure is clear and navigable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides strong pipeline context, including when the tool is applicable, what the fields_hint implies, and how to proceed to file export. It also covers security relevant to PII. Given that an output schema exists, the high-level summary of returned fields is a useful addition rather than a necessity, making the description complete for tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only lists execution_id as an integer without explanation (0% description coverage). The description compensates by explaining that execution_id comes from a completed data_process job's job.status response and clarifies that dataset_build jobs use dataset_id instead. This adds meaningful semantic context and prevents parameter misuse.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and resource ('structured fields extracted from a completed document'), clearly stating what the tool does. It distinguishes itself from sibling tools by positioning it as 'Step 3' in the pipeline and referencing related steps (dataset.build, dataset.export) and the job.status source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool: after a completed data_process job, using the execution_id from job.status. It provides alternatives and next steps via the fields_hint to call dataset.build, and for file retrieval, dataset.build → dataset.export. It also warns against using dataset_build IDs, preventing common mistakes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job.statusGet Job StatusARead-onlyIdempotent
Poll a job until it finishes — call this after document.process or dataset.build (Step 2).
Call repeatedly every 3–5 seconds until status is 'completed' or 'failed'. For data_process jobs: the completed response includes execution_id — pass it to job.result. For dataset_build jobs: the completed response includes dataset_id — pass it to dataset.export.
Args: job_id: Job ID returned by document.process or dataset.build.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| stage | No | |
| job_id | No | |
| reason | No | |
| status | No | |
| isError | No | |
| degraded | No | |
| pii_count | No | |
| pii_found | No | |
| poll_hint | No | |
| row_count | No | |
| dataset_id | No | |
| pii_masked | No | |
| has_dataset | No | |
| dataset_name | No | |
| execution_id | No | |
| quality_grade | No | |
| quality_score | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark the operation as read-only and idempotent. The description adds valuable behavioral details: polling interval, expected terminal statuses, and job-type-specific response fields (execution_id vs dataset_id), which goes beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear intro, polling instructions, job-type-specific guidance, and an Args section. Every sentence provides actionable information with no redundancy, keeping it appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's role in a multi-step workflow, the description covers when to call, how to poll, what to expect in the response, and which sibling tools to invoke next. With an output schema present, full return-enumeration is unnecessary; this description is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no description for job_id, but the description explains job_id is 'Job ID returned by document.process or dataset.build', giving clear origin and purpose. This fully compensates for the 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: polling a job until it finishes, and explicitly ties its use to after document.process or dataset.build. It also distinguishes from job.result by explaining the next step for different job types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage guidance: call after document.process or dataset.build, poll every 3–5 seconds until completed/failed, and pass the appropriate ID to job.result or dataset.export. This directly instructs when to use and what to do next.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
4 tool updates
v0.2.1- Added
dataset.chunks - Added
dataset.index - Changed
job.result1 field changed- added
Output schema / properties / degradedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Degraded" +}
- Changed
job.status1 field changed- added
Output schema / properties / degradedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Degraded" +}
6 tool updates
v0.1.9- First observed
dataset.build - First observed
dataset.export - First observed
dataset.search - First observed
document.process - First observed
job.result - First observed
job.status
TDQS
Each tool has a clearly distinct role in the pipeline: document.process starts a job, job.status polls it, job.result retrieves extracted fields, and dataset.* tools handle building, exporting, searching, indexing, and chunk retrieval. Even job.status and job.result are clearly separated by their polling vs. result-reading purposes.
All tools follow a consistent <domain>.<operation> pattern (document., job., dataset.) with lowercase snake_case. The operations mix verbs (process, build, export, index) and nouns (status, result, search, chunks), but the pattern is uniform and predictable, making it easy to infer the tool's function from its name.
Eight tools is well-scoped for the server's purpose: a document processing and RAG preparation pipeline. Each tool covers a necessary step in the workflow, with no redundancy and no unnecessary additions.
The toolset fully covers the document processing lifecycle: submit document, monitor job, retrieve results, build dataset, export dataset, plus additional search/index/chunks capabilities for RAG. The workflow is clearly described with numbered steps, and there are no dead ends—every tool's output feeds into the next appropriate tool.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
AI Visibility and Content Intelligence tools for Claude and MCP-compatible agents.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Turn documents into structured, AI-ready data by parsing, enriching, chunking, and embedding.
One MCP endpoint for Claude, GPT & Gemini: 100+ tools + no-code connectors + agent workers.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI agents and users to process documents through natural language, supporting PDF operations like text extraction, redaction, splitting, form filling, annotations, and content search.27561MIT
- AlicenseNot gradedqualityBmaintenanceEnables querying enterprise documents (DOCX, PDF, PPTX) using natural language, with hybrid search and MCP integration for Claude Desktop and other agents.MIT
- AlicenseNot gradedqualityBmaintenanceEnables document ingestion and typed knowledge graph queries through Claude MCP tools, allowing agents to extract, store, and retrieve typed entities and relations from documents.2MIT
- AlicenseNot gradedqualityBmaintenanceEnables document parsing, field extraction, PII redaction, contract analysis, chargeback handling, and company enrichment via the Kynth Core API. Provides tools for Claude and any MCP client to process documents and extract structured data.75MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/flexorch/flexorch-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server