Skip to main content
Glama
flexorch

flexorch-mcp

Official
by flexorch

flexorch-mcp

PyPI version CI License: MIT Python 3.10+ flexorch-mcp MCP server Glama score

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

document.process

Upload and process a document (PDF, DOCX, TXT, XLSX, HTML, XML, EML, JPG, PNG, TIFF)

document.reprocess

Re-queue an already-uploaded document through the pipeline

job.status

Poll a processing job until completed or failed

job.result

Get structured extracted fields from a completed job

dataset.build

Build a structured dataset from a completed execution

dataset.search

Semantic search across indexed datasets (Pro+)

dataset.export

Export a dataset as JSONL, CSV, JSON, XML, MD, or RAG (LangChain/LlamaIndex chunks)

dataset.index

Trigger semantic vector indexing for a dataset (Pro+)

dataset.chunks

Retrieve paginated RAG-ready text chunks from an indexed dataset (Pro+)


Installation

pip install flexorch-mcp

Requires 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.json

  • Windows: %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 registered

Example 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 content

Plan 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_KEY environment variable — never passed as a tool argument

  • No 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.com uses HTTPS



License

MIT — see LICENSE.

Available Tools

8 tools
dataset.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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
descriptionNo
execution_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
job_idNo
statusNo
isErrorNo
poll_hintNo

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 ChunksA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
page_sizeNo
dataset_idYes
min_qualityNoB
pii_masked_onlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageNo
errorNo
totalNo
chunksNo
isErrorNo
has_moreNo
page_sizeNo
dataset_idNo
chunk_countNo

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 DatasetA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNojsonl
dataset_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
formatNo
contentNo
isErrorNo
filenameNo
byte_countNo
dataset_idNo

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 RAGA
Idempotent

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
dataset_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
statusNo
isErrorNo
messageNo
dataset_idNo
index_hintNo

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 DocumentsA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoauto
queryYes
top_kNo
languageNo
document_typeNo
quality_gradeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeNo
errorNo
queryNo
isErrorNo
resultsNo
total_resultsNo

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_urlYes
mask_piiNo
document_typeNoauto

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
job_idNo
statusNo
isErrorNo
poll_hintNo

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 ResultA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
execution_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
fieldsNo
columnsNo
isErrorNo
privacyNo
qualityNo
degradedNo
has_moreNo
row_countNo
fields_hintNo
execution_idNo
document_typeNo
has_more_hintNo
detected_languageNo

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 StatusA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
stageNo
job_idNo
reasonNo
statusNo
isErrorNo
degradedNo
pii_countNo
pii_foundNo
poll_hintNo
row_countNo
dataset_idNo
pii_maskedNo
has_datasetNo
dataset_nameNo
execution_idNo
quality_gradeNo
quality_scoreNo

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 4 tool updatesv0.2.1
    • Addeddataset.chunks
    • Addeddataset.index
    • Changedjob.result1 field changed
      • addedOutput schema / properties / degraded
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Degraded"
        +}
    • Changedjob.status1 field changed
      • addedOutput schema / properties / degraded
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Degraded"
        +}
  2. 6 tool updatesv0.1.9
    • First observeddataset.build
    • First observeddataset.export
    • First observeddataset.search
    • First observeddocument.process
    • First observedjob.result
    • First observedjob.status

TDQS

A4.8/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityActive
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents and users to process documents through natural language, supporting PDF operations like text extraction, redaction, splitting, form filling, annotations, and content search.
    275
    61
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables querying enterprise documents (DOCX, PDF, PPTX) using natural language, with hybrid search and MCP integration for Claude Desktop and other agents.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables document ingestion and typed knowledge graph queries through Claude MCP tools, allowing agents to extract, store, and retrieve typed entities and relations from documents.
    2
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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.
    75
    MIT

Latest Blog Posts

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