by UpstageAI
MCP-Upstage-Server: AI document extraction with Upstage AI — automatic data extraction from documents, custom schemas an
Processes documents through Upstage AI services to parse various formats, extract structured data with custom schemas, and classify document types. Supports PDFs, images, and Office files with automated schema generation.
MCP-Upstage-Server is an official MCP server published by UpstageAI that provides AI assistants with tools and capabilities via the Model Context Protocol. MCP-Upstage-Server: AI document extraction with Upstage AI — automatic data extraction from documents, custom schemas an It is categorized under ai ml, developer tools.
You can install MCP-Upstage-Server in your AI client of choice. Use the install panel on this page to get one-click setup for Cursor, Claude Desktop, VS Code, and other MCP-compatible clients. This server runs locally on your machine via the stdio transport.
MIT
MCP-Upstage-Server is released under the MIT license. This is a permissive open-source license, meaning you can freely use, modify, and distribute the software.
Add new capabilities to Claude beyond text generation
Example
Access external data sources, execute code, interact with tools and services
Transform Claude from chatbot to action-taking agent
Provide Claude with access to relevant context and data
Example
Load project documentation, access knowledge bases, query databases
Get more accurate, context-aware responses
Automate multi-step workflows combining AI and external tools
Example
Research → Summarize → Create document → Send notification
Complete complex tasks end-to-end without manual steps
Share your MCP server with the developer community
We evaluated MCP-Upstage-Server against two servers with overlapping tools; this profile had the clearer scope statement.
MCP-Upstage-Server reduced integration guesswork — categories and install configs on the listing matched the upstream repo.
MCP-Upstage-Server has been reliable for tool-calling workflows; the MCP profile page is a good permalink for internal docs.
We evaluated MCP-Upstage-Server against two servers with overlapping tools; this profile had the clearer scope statement.
I recommend MCP-Upstage-Server for teams standardizing on MCP; the explainx.ai page compares cleanly with sibling servers.
MCP-Upstage-Server is a well-scoped MCP server in the explainx.ai directory — install snippets and categories matched our Claude Code setup.
Strong directory entry: MCP-Upstage-Server surfaces stars and publisher context so we could sanity-check maintenance before adopting.
We wired MCP-Upstage-Server into a staging workspace; the listing’s GitHub and npm pointers saved time versus hunting across READMEs.
MCP-Upstage-Server is among the better-indexed MCP projects we tried; the explainx.ai summary tracks the official description.
Useful MCP listing: MCP-Upstage-Server is the kind of server we cite when onboarding engineers to host + tool permissions.
showing 1-10 of 41
Node.js/TypeScript implementation of the MCP server for Upstage AI services.
# Install globally
npm install -g mcp-upstage-server
# Or use with npx (no installation required)
npx mcp-upstage-server
# 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_KEY
# 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 start
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"
}
}
}
}
POST /mcp - Main MCP communication endpointGET /mcp - Server-Sent Events streamGET /health - Health check endpointParse 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 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 providedSupported formats: JPEG, PNG, BMP, PDF, TIFF, HEIC, DOCX, PPTX, XLSX
Generate an extraction schema for a document using Upstage AI's schema generation API.
Parameters:
file_path (required): Path to the document file to analyzeSupported 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:
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 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 schemaSupported 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:
Use cases:
When auto_generate_schema is false, you need to provide a custom schema. Here's how to format it correctly:
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"
}
}
}
}
}
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"
}
}
}
}
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"
}
}
}
}
}
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"
}
});
"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 valuesinvoice_date instead of dateThe classify_document tool uses a different schema format optimized for classification tasks. Here's how to create custom classification schemas:
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.
Medical document classifier:
[
{"const": "prescription", "description": "Medical prescription document"},
{"const": "lab_result", "description": "Laboratory test results"},
{"const": "medical_recor
---
Prerequisites
Time Estimate
15-60 minutes depending on server complexity
Steps
Troubleshooting
✓ Do
✗ Don't
💡 Pro Tips
Architecture
Model Context Protocol standardizes how AI hosts (Claude, Cursor) communicate with external tools and data sources through server implementations.
Protocols
Compatibility
✓ Use when
Use when you need Claude to access external data, execute actions, or integrate with tools. Best for extending AI capabilities beyond conversation.
✗ Avoid when
Avoid when native integrations exist (use official APIs directly), for real-time critical systems, or when security/compliance requires zero external dependencies.