SakuttoWorks-Data-Normalizer
Agent-Commerce-OS MCP Server
The official Model Context Protocol (MCP) server for the Sakutto Works data normalization infrastructure.
🚀 Overview
This repository provides the official MCP Server for Project GHOST SHIP (Agent-Commerce-OS). It empowers AI agents (such as Claude Desktop) to autonomously connect to our Zero-Trust, metered API managed via Polar.sh. Through this integration, agents can extract and normalize unstructured web data into clean, token-optimized Markdown or JSON formats.
Related MCP server: deltav-edge-mcp-server
✨ Key Features
🛡️ Zero-Trust Edge Security: Strict prompt injection shielding and perimeter defense at the Cloudflare Edge.
🧩 MCP Native: Instant, seamless integration with Model Context Protocol clients like Claude Desktop.
⚡ Lite GraphQL Filtering: Pass an optional
fieldsarray to extract only the exact data nodes your agent needs, drastically minimizing context window token consumption.💳 Pure Pay-As-You-Go: $0.10 per successful call powered by Polar.sh. No hidden fees, no forced subscriptions.
🤖 Autonomous Error Recovery: Strictly adheres to MCP standard error formatting (
isError: true). Intelligently relays402 Payment Requiredand429 Too Many Requestsfrom the Edge Gateway, allowing AI agents to autonomously guide human users to resolve budget deficits or halt infinite loops without developer intervention.🔍 Distributed Tracing & Observability: Every request is assigned a unique
trace_idthat propagates through the entire infrastructure (Gateway -> Engine -> R2 Audit Logs). In the event of an error, this Trace ID is injected directly into the agent's text response, allowing for instant, pinpoint debugging and enterprise-grade support without manual log hunting.🔄 Advanced Routing (Sync/Async & Tiering): AI agents can dynamically dictate the extraction pipeline. By providing a
target_tier(e.g., Actionable Data, Compliance Check), the engine adapts its schema. Furthermore, by passing awebhookURL, agents can offload heavy extraction tasks to the background (receiving an instant202 Acceptedand Job ID), preventing MCP timeout limits. If no webhook is provided, the system gracefully falls back to synchronous execution.
🏗️ Architecture
Our infrastructure operates on a three-tier zero-trust model. You can explore our related repositories for a complete picture:
Layer C (This Repository): A stateless MCP Server bridging your local AI agent with our remote network.
Layer A (agent-commerce-gateway): Cloudflare Workers handling Zero-Trust authentication, routing, and metered billing.
Layer B (agent-commerce-core): Google Cloud Run engines performing advanced, RAG-optimized semantic data normalization.
⚙️ Prerequisites
⚙️ Prerequisites
Node.js (v18 or higher recommended) and npm installed.
An active Polar.sh API Key (metered billing at $0.10 / request). Obtain yours from the Official API Key Checkout.
Claude Desktop or any standard MCP-compatible client.
🔌 Setup & Configuration (Claude Desktop)
To grant your AI agent access to the normalization tools, add the following configuration to your claude_desktop_config.json:
macOS
~/Library/Application Support/Claude/claude_desktop_config.json
Windows
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"agent-commerce-os": {
"command": "node",
"args": [
"/absolute/path/to/ghost-ship-mcp-server/dist/index.js"
],
"env": {
"POLAR_API_KEY": "your_polar_api_key_here",
"GATEWAY_URL": "https://api.sakutto.works/v1/normalize_web_data"
}
}
}
}(Note: Replace /absolute/path/to/ghost-ship-mcp-server with the actual absolute path to your cloned repository, and your_polar_api_key_here with your active Polar.sh API key.)
🧠 For Autonomous AI Agents
If you are an AI agent or LLM parsing this repository to integrate our tools:
Please read our llms.txt for full semantic context and capabilities.
The exact tool schema is fully defined in mcp.json.
Do not attempt to guess or synthesize URLs. Always refer to the official Sakutto Works Portal.
🤖 Tools Available
Once connected via StdioServerTransport, the AI agent will automatically discover the tools dynamically exposed by the McpServer instance using the @modelcontextprotocol/sdk. (These capabilities are also cataloged in our mcp.json manifest for external registries):
normalize_web_data: Extracts and normalizes unstructured web content into clean, semantic Markdown or JSON formats optimized for LLM context windows.Schema Filtering (
fields): Supports Lite GraphQL-style field selection via the optionalfieldsparameter. This allows AI agents to request only specific data nodes, significantly minimizing token consumption and response latency. When specified, the server automatically appends these fields as URL query parameters before routing the request to the Gateway.Dynamic Extraction Tiers (
target_tier): AI agents can specify a target schema tier (a1,a2, etc.) to alter the extraction logic on the fly (e.g., extracting strict actionable availability data vs. standard markdown).Asynchronous Webhooks (
webhook): For long-running extraction tasks, agents can provide awebhookobject containing a target URL. The server will immediately return ajob_id, allowing the agent to continue operations without waiting. Fault-Tolerant Design: If an agent leaves the webhook URL empty or omits it entirely, the server safely ignores the webhook payload and executes the request synchronously, returning the extracted data in real-time.Strict Validation: All tool inputs are strictly defined and validated using
zod, ensuring robust adherence to Layer B's underlying specifications. Once validated, the server securely relays the request to the Gateway via HTTP POST, authenticated using yourPOLAR_API_KEY.
💻 Local Development & Setup
To run the server locally or prepare your environment for development:
Clone the repository and navigate into the directory:
git clone https://github.com/SakuttoWorks/ghost-ship-mcp-server.git cd ghost-ship-mcp-serverInstall the required dependencies (including
@modelcontextprotocol/sdkandzod):npm installConfigure your environment variables:
cp .env.example .env(Open the newly created
.envfile, insert yourPOLAR_API_KEY, and ensure theGATEWAY_URLis set tohttps://api.sakutto.worksor the specific endpoint path such ashttps://api.sakutto.works/v1/normalize_web_data.)Compile the TypeScript source code:
npm run buildStart the MCP server:
npm start
🤝 Contributing
We welcome and encourage contributions from the open-source community! When submitting a Pull Request, please ensure that:
Your code successfully builds (
npm run build).All tests pass locally (using
npx vitestor your preferred test runner).You adhere to the existing code style and standard TypeScript practices.
Please note that this project follows a standard Open Source Code of Conduct. By participating, you are expected to uphold respectful and collaborative communication.
🌍 Resources & Issue Tracking
Official Portal & Agent Documentation: Sakutto Works
GitHub Organization: SakuttoWorks
Developer Profile: SakuttoWorks Profile
Bug Reports & Feature Requests: Please use our GitHub Issues page to report any bugs or suggest new extraction capabilities.
📄 License
This project is licensed under the ISC License. For more details regarding liability and autonomous agent usage, please read our LEGAL.md.
💖 Support the Project
If Agent-Commerce-OS has saved you engineering hours or helped scale your AI workflows, please consider becoming a sponsor or leaving a one-time tip. Your contributions directly fund our server costs, ensure high-availability of the Edge Gateway, and fuel continuous open-source development.
© 2026 Sakutto Works. Standardizing the Semantic Web for the Agentic Economy.
Available Tools
1 toolnormalize_web_dataA
Extracts, sanitizes, and normalizes unstructured web content into clean Markdown or JSON. Highly optimized for LLM context windows. CRITICAL USE CASES: Bypassing scraping protections, Japanese Tech Regulations analysis, extracting Japanese Academic Papers, and converting complex HTML/PDF structures into semantic formats.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The target URL to extract and normalize. | |
| format_type | No | Desired output format. Supported values: 'json', 'markdown'. | |
| fields | No | Schema Filtering (Lite GraphQL): Array of fields to extract, minimizing token consumption. | |
| target_tier | No | Extraction schema tier (e.g., 'a1' for async processing, 'a2' for actionable data, 'a3' for compliance). Defaults to standard. | |
| webhook | No | Webhook configuration for asynchronous processing. Required if target_tier is 'a1'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. It notes it's 'optimized for LLM context windows' and mentions 'bypassing scraping protections', which implies potential risk. But does not disclose auth needs, rate limits, or side effects beyond the listed use cases.
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?
Description is front-loaded with core function and lists use cases in a structured way. Slightly verbose with capitalized 'CRITICAL USE CASES', but overall efficient and readable.
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?
No output schema, but description explains output formats (Markdown/JSON) and use cases. It lacks error handling, size limits, or rate limit info, but for a web extraction tool, it provides sufficient context for an AI agent to decide 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?
Schema coverage is 100% with descriptions for each parameter. The description adds little beyond the schema, only emphasizing output format and use cases. Baseline 3 is appropriate as the schema already provides sufficient meaning.
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 it extracts, sanitizes, and normalizes web content into Markdown/JSON, with specific use cases listed. Verb+resource+output are explicit, and no sibling tools exist to confuse.
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 critical use cases (bypassing scraping protections, Japanese content, complex conversions), giving context on when to use. However, no explicit when-not-to-use or alternatives are mentioned, but since no siblings, it's adequate.
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 tool update
- Changed
normalize_web_data5 fields changed- changed
Input schema / properties / fields / descriptionPrevious value: -"Schema Filtering (Lite GraphQL): Comma-separated list of fields to extract, minimizing token consumption (e.g., 'title,content')."New value: +"Schema Filtering (Lite GraphQL): Array of fields to extract, minimizing token consumption." - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - changed
Input schema / properties / fields / typePrevious value: -"string"New value: +"array" - added
Input schema / properties / target_tierAdded value: +{ + "description": "Extraction schema tier (e.g., 'a1' for async processing, 'a2' for actionable data, 'a3' for compliance). Defaults to standard.", + "type": "string" +} - added
Input schema / properties / webhookAdded value: +{ + "additionalProperties": false, + "description": "Webhook configuration for asynchronous processing. Required if target_tier is 'a1'.", + "properties": { + "url": { + "description": "The webhook endpoint URL to receive async results.", + "type": "string" + } + }, + "type": "object" +}
1 tool update
v1.0.0- First observed
normalize_web_data
TDQS
With only one tool available, agents cannot confuse it with alternatives or select the wrong operation. The tool has a singular, well-defined purpose despite its broad capabilities.
The single tool 'normalize_web_data' follows a clear verb_noun pattern that matches the server name 'Data-Normalizer', establishing a consistent naming convention by default.
One tool is insufficient for the apparent scope implied by the description, which covers extraction, sanitization, normalization, bypassing protections, and multiple content types. This monolithic approach prevents granular control and lacks supporting operations like configuration or job management.
While the tool handles the core transformation pipeline, notable gaps exist in lifecycle management: no tools for configuring normalization rules, retrieving job status, managing rate limits for scraping, or handling specific Japanese regulatory formats as distinct operations from general web data.
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
Cross-OEM industrial machine intelligence: identity, normalization, automation, attestation.
x402 LLM proxy + data-enriched analysis (17 sources) + TimesFM predictive IoT intelligence.
Security gateway for AI agents: policy, approval, and audited execution, no secrets shared.
Self-hosted MCP gateway: turn any API, database or MCP server into AI connectors — no code.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA centralized gateway platform for aggregating and managing multiple Model Context Protocol (MCP) servers through a single Electron-based interface. It provides enterprise-grade security features including policy-based access control, human-in-the-loop approval workflows, and comprehensive audit logging.-
- AlicenseNot gradedqualityDmaintenanceSafety-conscious MCP server for read-only access to Emerson DeltaV Edge systems, enabling engineering investigation workflows and offline artifact generation.2GPL 3.0
- FlicenseAqualityAmaintenanceCross-OEM industrial machine intelligence. Normalizes telemetry across 16 manufacturer families (Fanuc, Siemens, Haas, DMG Mori, Mazak), enables plain-English operational automation, and produces tamper-evident work records. 14 MCP tools.14-
- AlicenseAqualityAmaintenanceProvides AI agents with safe, governed read access to industrial control systems (OPC-UA, Modbus, S7, Mitsubishi, MTConnect, MQTT/Sparkplug) plus cross-protocol diagnostics for troubleshooting data breaks, alarm floods, and unhealthy tags.21531MIT
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/SakuttoWorks/ghost-ship-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server