Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Edit text inside existing PDFs: replace, delete, redact, insert, fill forms; original fonts kept.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
PDFEDIT_API_KEY, PDFEDIT_BASE_URL「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
ウェブ、デスクトップ、モバイルのClaudeで使えます:
https://pdfedit-mcp-remote.niubai-pdfedit-remote-worker.workers.dev/mcpClaude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"pdfedit": {
"command": "npx",
"args": [
"-y",
"@niubai/pdfedit-mcp"
],
"env": {
"PDFEDIT_API_KEY": "your-value",
"PDFEDIT_BASE_URL": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add --transport http pdfedit https://pdfedit-mcp-remote.niubai-pdfedit-remote-worker.workers.dev/mcpclaude mcp add pdfedit --env PDFEDIT_API_KEY=your-value --env PDFEDIT_BASE_URL=your-value -- npx -y @niubai/pdfedit-mcp動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"pdfedit": {
"url": "https://pdfedit-mcp-remote.niubai-pdfedit-remote-worker.workers.dev/mcp"
}
}
}プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"pdfedit": {
"command": "npx",
"args": [
"-y",
"@niubai/pdfedit-mcp"
],
"env": {
"PDFEDIT_API_KEY": "your-value",
"PDFEDIT_BASE_URL": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"pdfedit": {
"type": "http",
"url": "https://pdfedit-mcp-remote.niubai-pdfedit-remote-worker.workers.dev/mcp"
}
}
}プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"pdfedit": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@niubai/pdfedit-mcp"
],
"env": {
"PDFEDIT_API_KEY": "your-value",
"PDFEDIT_BASE_URL": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
ChatGPTがつなげるのは、インターネット上のサーバーだけです:
https://pdfedit-mcp-remote.niubai-pdfedit-remote-worker.workers.dev/mcpメニューの名前は、プランや時期によって少し違うことがあります。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
PDFEDIT_BASE_URL envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
このサーバーのツール一覧はまだ読み取っていません。エンドポイントは順番にチェックしています。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント zp130221 で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
まだチェックしていません。エンドポイントは順番にチェックしています
まだチェックしていません。エンドポイントは順番にチェックしています
まだチェックしていません。エンドポイントをチェックするときにツール一覧を読み取ります
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:PDFEDIT_API_KEY
どちらでも使えます。パソコンにインストールしても、クラウド版につないでもかまいません。
GitHubリポジトリの最終更新は–、最新バージョン(0.1.10)がレジストリに届いたのは18 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。URLでつながるので、リモートMCPサーバーに対応したアプリ(開発者モードのChatGPTなど)でも使えます。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, First Sale Scout
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Playbooks and a 14-day checklist for founders winning their first paying customers.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
@niubai/pdfedit-mcp — edit existing PDFs from your agentFive MCP tools over the PDF Edit API: replace, delete, redact, insert, form-fill, stamp or remove an image inside a PDF that already exists, keeping the original font, the original layout and everything you did not point at. Not "generate a new PDF that looks similar" — the same file, with the words you named changed, and a before/after picture of every change.
With
PDFEDIT_BASE_URLunset the server talks to the hosted API at
https://api.niubai.vip; set it to point at another deployment.
Without PDFEDIT_API_KEY the server runs on the keyless free tier: 20 pages a day per IP, outputs watermarked TEST, local files included.
Claude Code
claude mcp add pdfedit -- npx -y @niubai/pdfedit-mcp
Cursor / VS Code / Claude Desktop — this server entry (or the buttons on the repository page):
{ "pdfedit": { "command": "npx", "args": ["-y", "@niubai/pdfedit-mcp"] } }
Then ask your agent: *"In ./contract.pdf replace 'Acme Ltd' with 'Acme GmbH' and redact the IBAN."* The edited PDF is written next to the original and a before/after picture of every change comes back. A free API key (200 pages a month, no watermark on ordinary documents) takes one email at https://api.niubai.vip.
Claude Code — one line:
claude mcp add pdfedit -e PDFEDIT_API_KEY=sk_live_your_key -- npx -y @niubai/pdfedit-mcp
Cursor — the deeplink (Settings → MCP also takes the same JSON):
cursor://anysphere.cursor-deeplink/mcp/install?name=pdfedit&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBuaXViYWkvcGRmZWRpdC1tY3AiXSwiZW52Ijp7IlBERkVESVRfQVBJX0tFWSI6InNrX2xpdmVfeW91cl9rZXkifX0=
Claude Desktop — claude_desktop_config.json:
{
"mcpServers": { "pdfedit": { "command": "npx", "args": ["-y", "@niubai/pdfedit-mcp"], "env": { "PDFEDIT_API_KEY": "sk_live_your_key" } } } }
No key? Leave env out: the keyless free tier is 20 pages/day per IP, outputs watermarked TEST. Web clients that cannot run a local server (claude.ai) can add the hosted endpoint instead; it takes PDF URLs only.
This package runs on your machine, so every tool's file argument takes an absolute (or `~`) local path — it uploads the file for you and writes the edited PDF back next to the input as .edited.pdf — or an https:// URL, or an f_… file id from an earlier call. The hosted Streamable-HTTP endpoint cannot read your disk and says so (*remote server cannot read local paths; pass a URL*). PDFs never travel as MCP content blobs either way; only up to three preview PNGs of the changed pages come back inline.
| Tool | What it does |
|---|---|
pdf_edit | Replace / delete / redact / insert / fill, one call, with previews. |
pdf_batch | The same edits once per record over one template. Returns a job id. |
pdf_find | Every span with page, bbox, font and span id; filter with the four match modes. |
pdf_preview | Render a page (or a region) as a PNG, with optional highlight boxes. |
pdf_job | The result of an async edit or a batch. |
Every schema is generated from the gateway's OpenAPI document, so an edits[] entry here is exactly the one POST /v1/edit and the SDKs take — see src/tools.ts.
The engine would rather hand back "no" with a reason than a file that looks edited and is not. Two kinds of refusal.
Every change is written, then checked, then kept or undone. A group that fails any gate is rolled back and reported in failed[]:
| Reason | What happened |
|---|---|
collateral_damage | Pixels changed outside the rewrite's own area — something else on the page moved. The page is restored byte-for-byte. |
readback_failed | Re-reading the edited rectangle did not return the text that was supposed to be there. |
does_not_fit | The replacement does not fit the space, and fit was not allowed to make it worse (fit: "strict"), or an insert would have landed on text that is already there. |
font_unavailable | options.font.policy: "exact_only" (or "metric_only") and neither the system nor the document has an acceptable face. |
redact_residual | After a redaction the string was still readable in the rect — the removal is refused rather than reported as done. |
no_target, field_not_editable, field_value_invalid, field_value_mismatch | The form field does not exist, is read-only, rejects the value, or did not read back as written. |
With options.atomic (the default) any single failure fails the whole request and no file is produced; options.strict does the same for an edit that simply did not match. An unmatched edit comes back with fuzzy suggestions ("did you mean *Acme, Inc.*?") rather than a silent no-op.
invalid_requestWhat the API refuses before touching the document:
find. Everything after the matcher is left-to-right: lines are assembled left edge first and replacements are laid out rightwards, so RTL would be matched against a visually reversed line and written in the wrong direction with nothing downstream able to notice."changes" and "none" work.font_source, font_used), the summary spells out approx_font_used when the last resort was taken, and options.font.policy: "metric_only" refuses it outright, so "it looks slightly different" is a value you can read rather than a surprise.flatten_skipped is warned instead of failing.password); edits are not attempted without it.edits[], options and the response.MIT -- this server, the SDKs, the agent skill and the OpenAPI document. The hosted API itself is a proprietary service.