MCP-Upstage-Server
OfficialClick 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., "@MCP-Upstage-Serverextract invoice details from this PDF"
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.
MCP-Upstage-Server
Node.js/TypeScript implementation of the MCP server for Upstage AI services.
Features
Document Parsing: Extract structure and content from various document types (PDF, images, Office files)
Information Extraction: Extract structured information using custom or auto-generated schemas
Schema Generation: Automatically generate extraction schemas from document analysis
Document Classification: Classify documents into predefined categories (invoice, receipt, contract, etc.)
Built with TypeScript for type safety
Dual transport support: stdio (default) and HTTP Streamable
Async/await pattern throughout
Comprehensive error handling and retry logic
Progress reporting support
Related MCP server: Nutrient Document Engine MCP Server
Installation
Prerequisites
Node.js 18.0.0 or higher
Upstage API key from Upstage Console
Install from npm
# Install globally
npm install -g mcp-upstage-server
# Or use with npx (no installation required)
npx mcp-upstage-serverInstall from source
# Clone the repository
git clone https://github.com/UpstageAI/mcp-upstage.git
cd mcp-upstage/mcp-upstage-node
# Install dependencies
npm install
# Build the project
npm run build
# Set up environment variables
cp .env.example .env
# Edit .env and add your UPSTAGE_API_KEYUsage
Running the server
# With stdio transport (default)
UPSTAGE_API_KEY=your-api-key npx mcp-upstage-server
# With HTTP Streamable transport
UPSTAGE_API_KEY=your-api-key npx mcp-upstage-server --http
# With HTTP transport on custom port
UPSTAGE_API_KEY=your-api-key npx mcp-upstage-server --http --port 8080
# Show help
npx mcp-upstage-server --help
# Development mode (from source)
npm run dev
# Production mode (from source)
npm startIntegration with Claude Desktop
Option 1: stdio transport (default)
{
"mcpServers": {
"upstage": {
"command": "npx",
"args": ["mcp-upstage-server"],
"env": {
"UPSTAGE_API_KEY": "your-api-key-here"
}
}
}
}Option 2: HTTP Streamable transport
{
"mcpServers": {
"upstage-http": {
"command": "npx",
"args": ["mcp-upstage-server", "--http", "--port", "3000"],
"env": {
"UPSTAGE_API_KEY": "your-api-key-here"
}
}
}
}Transport Options
stdio Transport (Default)
Pros: Simple setup, direct process communication
Cons: Single client connection only
Usage: Default mode, no additional configuration needed
HTTP Streamable Transport
Pros: Multiple client support, network accessible, RESTful API
Cons: Requires port management, network configuration
Endpoints:
POST /mcp- Main MCP communication endpointGET /mcp- Server-Sent Events streamGET /health- Health check endpoint
Available Tools
parse_document
Parse a document using Upstage AI's document digitization API.
Parameters:
file_path(required): Path to the document fileoutput_formats(optional): Array of output formats (e.g., ['html', 'text', 'markdown'])
Supported formats: PDF, JPEG, PNG, TIFF, BMP, GIF, WEBP
extract_information
Extract structured information from documents using Upstage Universal Information Extraction.
Parameters:
file_path(required): Path to the document fileschema_path(optional): Path to JSON schema fileschema_json(optional): JSON schema as stringauto_generate_schema(optional, default: true): Auto-generate schema if none provided
Supported formats: JPEG, PNG, BMP, PDF, TIFF, HEIC, DOCX, PPTX, XLSX
generate_schema
Generate an extraction schema for a document using Upstage AI's schema generation API.
Parameters:
file_path(required): Path to the document file to analyze
Supported formats: JPEG, PNG, BMP, PDF, TIFF, HEIC, DOCX, PPTX, XLSX
This tool analyzes a document and automatically generates a JSON schema that defines the structure and fields that can be extracted from similar documents. The generated schema can then be used with the extract_information tool when auto_generate_schema is set to false.
Use cases:
Create reusable schemas for multiple similar documents
Have more control over extraction fields
Ensure consistent field naming across extractions
The tool returns both a readable schema object and a schema_json string that can be directly copied and used with the extract_information tool.
classify_document
Classify a document into predefined categories using Upstage AI's document classification API.
Parameters:
file_path(required): Path to the document file to classifyschema_path(optional): Path to JSON file containing custom classification schemaschema_json(optional): JSON string containing custom classification schema
Supported formats: JPEG, PNG, BMP, PDF, TIFF, HEIC, DOCX, PPTX, XLSX
This tool analyzes a document and classifies it into categories. By default, it uses a comprehensive set of document types, but you can provide custom classification categories.
Default categories:
invoice, receipt, contract, cv, bank_statement, tax_document, insurance, business_card, letter, form, certificate, report, others
Use cases:
Automatically sort and organize documents by type
Filter documents for specific processing workflows
Build document management systems with automatic categorization
Schema Guide for Information Extraction
When auto_generate_schema is false, you need to provide a custom schema. Here's how to format it correctly:
š Basic Schema Structure
The schema must follow this exact structure:
{
"type": "json_schema",
"json_schema": {
"name": "document_schema",
"schema": {
"type": "object",
"properties": {
"field_name": {
"type": "string|number|array|object",
"description": "Description of what to extract"
}
}
}
}
}ā Common Mistakes
Wrong: Missing nested structure
{
"company_name": {
"type": "string"
}
}Wrong: Incorrect response_format
{
"schema": {
"company_name": "string"
}
}Wrong: Missing properties wrapper
{
"type": "json_schema",
"json_schema": {
"name": "document_schema",
"schema": {
"type": "object",
"company_name": {
"type": "string"
}
}
}
}ā Correct Examples
Simple schema:
{
"type": "json_schema",
"json_schema": {
"name": "document_schema",
"schema": {
"type": "object",
"properties": {
"company_name": {
"type": "string",
"description": "Name of the company"
},
"invoice_number": {
"type": "string",
"description": "Invoice number"
},
"total_amount": {
"type": "number",
"description": "Total invoice amount"
}
}
}
}
}Complex schema with arrays and objects:
{
"type": "json_schema",
"json_schema": {
"name": "document_schema",
"schema": {
"type": "object",
"properties": {
"company_info": {
"type": "object",
"properties": {
"name": {"type": "string"},
"address": {"type": "string"},
"phone": {"type": "string"}
},
"description": "Company information"
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"item_name": {"type": "string"},
"quantity": {"type": "number"},
"price": {"type": "number"}
}
},
"description": "List of invoice items"
},
"invoice_date": {
"type": "string",
"description": "Invoice date in YYYY-MM-DD format"
}
}
}
}
}š ļø Schema Creation Helper
You can create schemas programmatically:
function createSchema(fields) {
return JSON.stringify({
"type": "json_schema",
"json_schema": {
"name": "document_schema",
"schema": {
"type": "object",
"properties": fields
}
}
});
}
// Usage example:
const schema = createSchema({
"company_name": {
"type": "string",
"description": "Company name"
},
"total": {
"type": "number",
"description": "Total amount"
}
});š” Data Types
"string": Text data (names, addresses, etc.)"number": Numeric data (amounts, quantities, etc.)"boolean": True/false values"array": Lists of items"object": Nested structures"null": Null values
š Best Practices
Always include descriptions: They help the AI understand what to extract
Use specific field names:
invoice_dateinstead ofdateNest related fields: Group related information in objects
Validate your JSON: Use a JSON validator before using the schema
Test with simple schemas first: Start with basic fields before adding complexity
Classification Schema Guide
The classify_document tool uses a different schema format optimized for classification tasks. Here's how to create custom classification schemas:
š Simple Classification Categories
For custom categories, just provide an array of category objects:
[
{"const": "category1", "description": "Description of category 1"},
{"const": "category2", "description": "Description of category 2"},
{"const": "others", "description": "Fallback category"}
]The tool automatically wraps this in the proper schema structure for the API.
ā Correct Classification Examples
Medical document classifier:
[
{"const": "prescription", "description": "Medical prescription document"},
{"const": "lab_result", "description": "Laboratory test results"},
{"const": "medical_record", "description": "Patient medical record"},
{"const": "insurance_claim", "description": "Medical insurance claim"},
{"const": "others", "description": "Other medical documents"}
]Business document classifier:
[
{"const": "purchase_order", "description": "Purchase order document"},
{"const": "delivery_note", "description": "Delivery or shipping note"},
{"const": "quotation", "description": "Price quotation or estimate"},
{"const": "meeting_minutes", "description": "Meeting minutes or notes"},
{"const": "others", "description": "Other business documents"}
]ā Common Classification Mistakes
Wrong: Missing description field
[
{"const": "invoice"},
{"const": "receipt"}
]Wrong: Missing const field
[
{"description": "Invoice document"},
{"description": "Receipt document"}
]Wrong: Using different field names
[
{"value": "invoice", "label": "Invoice document"},
{"type": "receipt", "desc": "Receipt document"}
]š” Classification Best Practices
Always include "others" category: Provides fallback for unexpected document types
Use descriptive const values: Clear category names like "medical_prescription" vs "doc1"
Add meaningful descriptions: Help the AI understand what each category represents
Keep categories mutually exclusive: Avoid overlapping categories that could confuse classification
Limit category count: Too many categories can reduce accuracy (recommended: 3-10 categories)
Use consistent naming: Stick to snake_case or kebab-case throughout
š ļø Classification Categories Helper
function createClassificationCategories(categories) {
return JSON.stringify(categories.map(cat => ({
"const": cat.value,
"description": cat.description
})));
}
// Usage example:
const categoriesJson = createClassificationCategories([
{value: "legal_contract", description: "Legal contracts and agreements"},
{value: "financial_report", description: "Financial statements and reports"},
{value: "others", description: "Other document types"}
]);
// Result: Ready to use as schema_json parameter
// [{"const":"legal_contract","description":"Legal contracts and agreements"},{"const":"financial_report","description":"Financial statements and reports"},{"const":"others","description":"Other document types"}]Development
# Run tests
npm test
# Run tests in watch mode
npm run test:watch
# Lint code
npm run lint
# Format code
npm run format
# Clean build artifacts
npm run cleanProject Structure
mcp-upstage-node/
āāā src/
ā āāā index.ts # Entry point
ā āāā server.ts # MCP server implementation
ā āāā tools/ # Tool implementations
ā ā āāā documentParser.ts
ā ā āāā informationExtractor.ts
ā āāā utils/ # Utility modules
ā āāā apiClient.ts # HTTP client with retry
ā āāā fileUtils.ts # File operations
ā āāā validators.ts # Input validation
ā āāā constants.ts # Configuration constants
āāā dist/ # Compiled JavaScript (generated)
āāā package.json
āāā tsconfig.json
āāā README.mdOutput Files
Results are saved to:
Document parsing:
~/.mcp-upstage/outputs/document_parsing/Information extraction:
~/.mcp-upstage/outputs/information_extraction/Generated schemas:
~/.mcp-upstage/outputs/information_extraction/schemas/Document classification:
~/.mcp-upstage/outputs/document_classification/
License
MIT
Available Tools
4 toolsclassify_documentA
Classify a document into predefined categories using Upstage AI's document classification API.
This tool analyzes a document and classifies it into one of several predefined categories such as invoice, receipt, contract, CV, bank statement, and others. You can use the default classification schema or provide your own custom classification categories.
Supported file formats: JPEG, PNG, BMP, PDF, TIFF, HEIC, DOCX, PPTX, XLSX Max file size: 50MB Max pages: 100
DEFAULT CATEGORIES:
invoice: Commercial invoice with itemized charges and billing information
receipt: Receipt showing purchase transaction details
contract: Legal agreement or contract document
cv: Curriculum vitae or resume
bank_statement: Bank account statement showing transactions
tax_document: Tax forms or tax-related documents
insurance: Insurance policy or claims document
business_card: Business card with contact information
letter: Formal or business letter
form: Application form or survey form
certificate: Certificate or diploma
report: Business report or analytical document
others: Other document types not listed above
CUSTOM CATEGORIES: Simply provide an array of categories in schema_json: [ {"const": "category1", "description": "Description of category 1"}, {"const": "category2", "description": "Description of category 2"}, {"const": "others", "description": "Other"} ]
Example custom schema_json: [{"const":"medical","description":"Medical records or health documents"},{"const":"legal","description":"Legal documents"},{"const":"financial","description":"Financial statements or reports"},{"const":"others","description":"Other"}]
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| schema_path | No | ||
| schema_json | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively adds context beyond basic functionality: it specifies supported file formats (JPEG, PNG, etc.), max file size (50MB), max pages (100), and details about default and custom categories. However, it does not mention rate limits, authentication needs, or error handling.
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 appropriately sized but could be more front-loaded. Key information like supported formats and limits is included, but the extensive listing of default categories and custom schema examples, while useful, makes it slightly verbose. Every sentence earns its place, but structure could be tighter.
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 (3 parameters, 0% schema coverage, no output schema, no annotations), the description is largely complete. It covers purpose, usage, parameters, and behavioral details like file constraints. However, it lacks information on output format or error responses, which would enhance completeness.
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 description coverage is 0%, so the description must compensate. It thoroughly explains the parameters: 'file_path' for the document to classify, 'schema_path' and 'schema_json' for custom categories, with detailed examples and formatting guidelines. This adds significant meaning beyond the bare input schema.
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: 'Classify a document into predefined categories using Upstage AI's document classification API.' It specifies the verb ('classify'), resource ('document'), and distinguishes it from siblings like 'extract_information' or 'parse_document' by focusing on categorization rather than data extraction or parsing.
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 clear context for when to use this tool: for document classification into categories like invoice, receipt, contract, etc. It mentions using default or custom categories, but does not explicitly state when to choose this over sibling tools (e.g., 'extract_information') or when not to use it (e.g., for non-document files).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_informationA
Extract structured information from documents using Upstage Universal Information Extraction.
This tool can extract key information from any document type without pre-training. You can either provide a schema defining what information to extract, or let the system automatically generate an appropriate schema based on the document content.
Supported file formats: JPEG, PNG, BMP, PDF, TIFF, HEIC, DOCX, PPTX, XLSX Max file size: 50MB Max pages: 100
SCHEMA FORMAT: When auto_generate_schema is false, provide schema in this exact format: { "type": "json_schema", "json_schema": { "name": "document_schema", "schema": { "type": "object", "properties": { "field_name": { "type": "string|number|array|object", "description": "What to extract" } } } } }
Example schema_json: {"type":"json_schema","json_schema":{"name":"document_schema","schema":{"type":"object","properties":{"company_name":{"type":"string","description":"Company name"},"invoice_number":{"type":"string","description":"Invoice number"},"total_amount":{"type":"number","description":"Total amount"}}}}}
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| schema_path | No | ||
| schema_json | No | ||
| auto_generate_schema | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure and does so effectively. It describes the tool's capabilities (extraction from multiple document types without pre-training), constraints (file formats, size limits, page limits), and operational modes (schema-provided vs auto-generated). It doesn't mention rate limits or authentication requirements, but covers the core behavioral aspects well for a tool with no 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 appropriately sized and well-structured, starting with the core purpose, then usage guidelines, technical constraints, schema format details, and an example. Every section earns its place, though the schema format explanation is quite detailed (which is necessary given the complexity). It could be slightly more front-loaded with the most critical information.
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 complexity (4 parameters with 0% schema coverage, no annotations, no output schema), the description provides comprehensive context about what the tool does, how to use it, technical constraints, and parameter semantics. The main gap is the lack of information about return values or output format, which would be helpful since there's no output schema. However, it covers most other aspects thoroughly.
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 for 4 parameters, the description compensates excellently by explaining all parameters' purposes and relationships. It clarifies that file_path is required, explains the schema_path vs schema_json options, details the auto_generate_schema default and behavior, and provides a comprehensive schema format example with concrete syntax. This adds substantial meaning beyond the bare input schema.
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 specific action ('extract structured information'), the resource ('documents'), and the technology used ('Upstage Universal Information Extraction'). It distinguishes from sibling tools like classify_document, generate_schema, and parse_document by focusing specifically on information extraction rather than classification, schema generation, or general parsing.
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 guidance on when to use this tool vs alternatives: it explains the two modes (schema-provided vs auto-generated) and mentions sibling tools like generate_schema that could be alternatives for schema creation. It also specifies technical constraints (file formats, size limits, page limits) that help determine when the tool is applicable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_schemaA
Generate an extraction schema for a document using Upstage AI's schema generation API.
This tool analyzes a document and automatically generates a JSON schema that defines the structure and fields that can be extracted from similar documents. The generated schema can then be used with the extract_information tool when auto_generate_schema is set to false.
This is useful when you want to:
Create a reusable schema for multiple similar documents
Have more control over the extraction fields
Ensure consistent field naming and structure across extractions
Supported file formats: JPEG, PNG, BMP, PDF, TIFF, HEIC, DOCX, PPTX, XLSX Max file size: 50MB Max pages: 100
The tool returns both a readable schema object and a schema_json string that can be directly copied and used with the extract_information tool.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden of behavioral disclosure. It effectively describes key behavioral traits: supported file formats (JPEG, PNG, etc.), constraints (max file size: 50MB, max pages: 100), and the return format (both a readable schema object and a schema_json string). However, it lacks details on error handling, rate limits, or authentication needs, which would be beneficial for a tool with no 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 and front-loaded, starting with the core purpose. Each sentence adds value: the first explains the tool's function, the second details usage scenarios, the third lists technical constraints, and the fourth describes the output. There is no redundant or wasted information.
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 (AI-based schema generation), no annotations, no output schema, and 0% schema coverage, the description does a good job by covering purpose, usage, constraints, and output. However, it could be more complete by including error cases, example outputs, or more details on the schema structure, which would help an agent use it effectively in varied contexts.
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 and 1 parameter (file_path), the description must compensate. It adds significant meaning by specifying supported file formats and constraints (max file size: 50MB, max pages: 100), which clarifies the expected input beyond the basic schema. However, it doesn't detail the file_path format or examples, leaving some ambiguity.
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: 'Generate an extraction schema for a document using Upstage AI's schema generation API.' It specifies the verb ('generate'), resource ('extraction schema'), and distinguishes from siblings by mentioning its output is used with 'extract_information' when 'auto_generate_schema' is false, unlike classify_document or parse_document.
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 explicitly states when to use this tool: 'This is useful when you want to: - Create a reusable schema for multiple similar documents - Have more control over the extraction fields - Ensure consistent field naming and structure across extractions.' It also mentions the alternative: using the generated schema with 'extract_information' when 'auto_generate_schema' is false, providing clear context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_documentC
Parse a document using Upstage AI's document digitization API.
This tool extracts the structure and content from various document types, including PDFs, images, and Office files. It preserves the original formatting and layout while converting the document into a structured format.
Supported file formats include: PDF, JPEG, PNG, TIFF, and other common document formats.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| output_formats | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. While it mentions the tool 'preserves the original formatting and layout' and converts to 'a structured format', it lacks critical behavioral details such as API rate limits, authentication requirements, error handling, or what the output looks like (since there's no output schema).
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 and appropriately sized with four sentences. It front-loads the core purpose and efficiently lists supported file formats. There's minimal redundancy, though the file format list could be more 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 complexity of a parsing tool with 2 parameters, 0% schema coverage, no annotations, and no output schema, the description is incomplete. It lacks details on parameter usage, behavioral constraints, and output expectations, leaving significant gaps for an AI agent to use it 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 for 2 parameters, the description fails to compensate. It doesn't explain what 'file_path' should contain (e.g., local path, URL, supported file systems) or what 'output_formats' are (e.g., JSON, XML, specific structured formats). The mention of 'structured format' is vague and doesn't map to parameters.
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: 'Parse a document using Upstage AI's document digitization API' and 'extracts the structure and content from various document types'. It specifies the verb ('parse', 'extracts') and resource ('document'), but doesn't explicitly differentiate from sibling tools like 'classify_document' or 'extract_information'.
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 no guidance on when to use this tool versus the sibling tools ('classify_document', 'extract_information', 'generate_schema'). It mentions what the tool does but offers no context about appropriate use cases, prerequisites, or alternatives.
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
- First observed
classify_document - First observed
extract_information - First observed
generate_schema - First observed
parse_document
TDQS
The tools have mostly distinct purposes: classify_document categorizes documents, extract_information pulls structured data, generate_schema creates schemas for extraction, and parse_document digitizes content. However, extract_information and parse_document could be confused as both involve extracting content from documents, though extract_information focuses on structured data fields while parse_document preserves formatting and layout. The descriptions help clarify this overlap.
All tool names follow a consistent verb_noun pattern with snake_case: classify_document, extract_information, generate_schema, and parse_document. This uniformity makes the tool set predictable and easy to understand, with no deviations in naming style.
With 4 tools, the count is reasonable for a document processing server, covering classification, extraction, schema generation, and digitization. It's slightly lean but well-scoped, as each tool serves a distinct function in the document AI workflow, though some might expect additional tools like summarization or translation for completeness.
The tool set covers core document AI operations: classification, information extraction, schema generation, and digitization. Minor gaps exist, such as missing summarization, translation, or document editing tools, but agents can work around these with the provided tools. The surface supports key workflows like categorizing documents and extracting structured data effectively.
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
Turn documents into structured, AI-ready data by parsing, enriching, chunking, and embedding.
Turn documents into structured data: parse, extract, classify, split, and fill PDF forms.
1Ingest, manage, and retrieve documents for RAG-powered AI applications
Composable APIs for document extraction, image transformation, and document & sheet generation.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables extraction of text, tables, and structured data from PDFs, images, and office documents using LandingAI's Agentic Document Extraction API. Supports both direct parsing and background job processing for large files with privacy-focused processing.-
- 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

mcp-upstageofficial
AlicenseBqualityCmaintenanceEnables AI assistants to extract and structure content from documents (PDFs, images, Office files) via Upstage AI's APIs, with seamless Claude Desktop integration.213MIT- AlicenseAqualityCmaintenanceEnables AI assistants to extract and structure content from documents (PDFs, images, Office files) using Upstage AI's document digitization and information extraction APIs.23MIT
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/UpstageAI/mcp-upstage-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server