docmcp — Word & Excel files

io.github.AdirdaviPublished by GitHub account Adirdaviv0.2.0Updated Oct 24, 2026

Real .docx and .xlsx files from structured data, with automatic Hebrew/Arabic RTL.

VerifiedStreamable HTTPWeb executableProductivity & WorkflowFiles & Storage

Overview

AI-generated overview

A hosted MCP server that turns structured data into real Word (.docx) and Excel (.xlsx) files, with automatic Hebrew/Arabic right-to-left support.

What you can do
Create Word documents with headings, paragraphs, bullet or numbered lists, tables, page breaks and right-to-left layout for Hebrew and Arabic text. Create Excel workbooks with multiple sheets, bold and frozen headers, auto-filters, sized columns and preserved numeric values. Check how many calls have been used against the monthly quota. Generated files are returned as short-lived download links rather than inline data.
When to use it
Use it when an assistant needs to deliver a genuine Word or Excel file rather than Markdown, especially for reports, tables or documents in Hebrew or Arabic. It suits users who want a hosted endpoint without running anything locally.
Requirements
A remote HTTP endpoint; no local runtime needed. A bearer API key in the Authorization header is required. A free key covers 10 documents per month; paid plans are available. The hosted service may sleep when idle and take tens of seconds to wake.
Before you install
The API key is the only account credential and is shown once at signup, so a lost key cannot be recovered. Paid plans cost money and are billed through Stripe. Download links expire after 24 hours and may break if the host restarts. Generated documents are stored on the provider's servers.

Installation

In SourceWeft

  1. Open docmcp — Word & Excel files in the dashboard and add it to a workspace.
  2. Connect Authorization token credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.Adirdavi%2Fdocmcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "docmcp-word-excel-files": {
      "type": "http",
      "url": "https://docmcp.onrender.com/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

docmcp

Live: https://docmcp.onrender.com — free key at POST /keys/free, 10 docs/month. Paid: $10/mo for 100, $30/mo for 500. Quotas live in PLANS in src/store.ts.

A paid MCP server that turns structured data into real .docx and .xlsx files. Agents are good at prose and bad at file formats — they emit Markdown and hope. This gives them a tool that returns a Word or Excel file with actual headings, tables, bold headers, frozen panes and RTL support.

Returns a short-lived download URL rather than a base64 blob: a 200KB docx inlined into a tool result costs the caller ~70k tokens.

Two modes, one codebase:

  • --stdio — local client (Claude Desktop / Code). No auth, no quota, no expiry; files are written to OUT_DIR and the tool returns the path.
  • default — hosted HTTP at /mcp. API key required, quota metered, files served as URLs that expire after 24h. This is the product.

Local

bash
npm install

Already registered in Claude Desktop as docmcp (output → ~/Documents/docmcp). To register elsewhere:

json
{  "mcpServers": {    "docmcp": {      "command": "/usr/local/bin/node",      "args": ["<repo>/node_modules/tsx/dist/cli.mjs", "<repo>/src/index.ts", "--stdio"],      "env": { "DATABASE_URL": "postgres://…", "OUT_DIR": "<somewhere>" }    }  }}

Absolute paths matter — the client launches with a minimal PATH.

Hosted

bash
npm start          # http://localhost:8787/mcpcurl -X POST localhost:8787/keys/free
json
{  "mcpServers": {    "docmcp": {      "type": "http",      "url": "https://your-host/mcp",      "headers": { "Authorization": "Bearer dk_..." }    }  }}

Tools

ToolDoes
create_docxheadings, paragraphs, bullet/numbered lists, tables, page breaks, rtl for Hebrew/Arabic
create_xlsxmulti-sheet, bold + frozen header, auto-filter, sized columns, numbers stay numbers
usagecalls used / quota this month

Env

VarDefaultNotes
PORT8787
BASE_URLhttp://localhost:$PORTMust be the public URL — it goes in download links
DATABASE_URL—Required. Any Postgres (Koyeb, Neon, Supabase)
OUT_DIRoutGenerated files, swept hourly, 24h TTL
STRIPE_SECRET_KEY—Omit to run without billing
STRIPE_WEBHOOK_SECRET—For /stripe/webhook
STRIPE_PRICE_STARTER, STRIPE_PRICE_PRO—Price IDs behind /buy/:plan

Plans and quotas live in PLANS in src/store.ts.

Deploy

Any Docker host with a Postgres URL. There is no persistent disk requirement: generated files live on the container filesystem and expire in 24h anyway, so a restart only breaks links that were about to die. Everything that must survive — keys, quotas, the IP salt — is in Postgres.

Currently Render (web service, free tier) + Neon (Postgres, free, no expiry). Deliberately two providers: state lives somewhere that isn't tied to whoever is hosting the container this month. Render builds the Dockerfile straight from GitHub.

BASE_URL must be the public URL — it is baked into every download link handed to a client, so getting it wrong produces links to a host that does not exist. You only learn the URL after the first deploy, so set it then and redeploy.

Render's free tier sleeps after 15 minutes idle and takes 30–50s to wake. That is the cost of not having a card on file; fix it by upgrading once a customer pays.

Billing flow

/buy/starter → Stripe Checkout → webhook checkout.session.completed → key issued → customer lands on /success and sees the key there. No email provider needed. customer.subscription.deleted deactivates it. There are no user accounts: the key is the account.

Test

bash
npm test

Covers both generators (including a ragged table row and a / in a sheet name — both things an LLM will send eventually), number preservation through an xlsx round-trip, and that quota stops exactly at the plan limit.

Known gaps

  • No PDF. Good PDF output needs headless Chrome or LibreOffice, which triples the deploy. Word and Excel are the actual gap — everyone already ships Markdown→PDF. Add it when a paying user asks.
  • A lost key cannot be recovered. It is shown once on /success. Add email delivery or a "resend by email" route when the first customer asks.
  • Files are on the container filesystem. Deliberate — see Deploy. Move to object storage only if 24h links breaking on restart ever actually bothers someone.
  • Free keys are rate limited, not abuse-proof. One per IP per 24h plus a global daily ceiling (FREE_KEYS_PER_DAY, default 200). Rotating VPNs still defeats it — nothing stops that, and no free tier anywhere survives a determined attacker. The limits exist to bound the worst case, not to eliminate it.
  • /admin needs ADMIN_TOKEN. Unset, the route 404s, so an unconfigured deploy never exposes it. Visit /admin?token=….

Source: README.md at commit b0e11da

Tools

0
This server asks for a credential such as an API key, so SourceWeft could not read its tools without one and has not indexed them.

Version history

1
  1. v0.2.0LatestSep 16, 2026

Score

85% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts