/ ディレクトリ / プレイグラウンド / pctx
● コミュニティ portofcontext ⚡ 即起動

pctx

作者 portofcontext · portofcontext/pctx

MCPツール呼び出しをサンドボックス化されたJavaScriptとして実行 — 1つのコードブロックで多数の逐次呼び出しを置き換え、トークンを節約しつつ認証情報を隔離します。

pctx(Port of Context)は、MCPサーバーをDenoサンドボックス内から呼び出し可能なJS関数に変換する実行レイヤーです。LLMが複数のツール呼び出しを一度にまとめたコードを記述し、pctxがファイルシステム・環境変数へのアクセスなし、ネットワークはホワイトリスト制限付きで実行します。認証情報はpctxレイヤーに保持され、LLMがそれを参照することはありません。

なぜ使うのか

主な機能

ライブデモ

実際の動作

pctx.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "pctx": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/portofcontext/pctx"
      ],
      "_inferred": true
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "pctx": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/portofcontext/pctx"
      ],
      "_inferred": true
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "pctx": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/portofcontext/pctx"
      ],
      "_inferred": true
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "pctx": {
      "command": "TODO",
      "args": [
        "See README: https://github.com/portofcontext/pctx"
      ],
      "_inferred": true
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "pctx",
      "command": "TODO",
      "args": [
        "See README: https://github.com/portofcontext/pctx"
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "pctx": {
      "command": {
        "path": "TODO",
        "args": [
          "See README: https://github.com/portofcontext/pctx"
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add pctx -- TODO 'See README: https://github.com/portofcontext/pctx'

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: pctx

20回のツール呼び出しチェーンを1つのコードブロックで実行

👤 長い逐次フローでトークンコストが急増しているエージェント開発者 ⏱ ~20 min advanced

使うタイミング: タスクに多数のツール呼び出しが必要な場合(N件のIssue取得、各件のエンリッチメント、サマリーの投稿など)。

前提条件
  • pctxがインストール・設定済みであること — brew install portofcontext/tap/pctx; pctx config add <upstream-mcp>
フロー
  1. アップストリームを認証情報とともに登録
    pctx config add github --env GITHUB_TOKEN=... and add sentry --env SENTRY_TOKEN=....✓ コピーしました
    → アップストリーム一覧が表示される
  2. エージェントにCode Modeの記述を依頼
    In pctx Code Mode, write a function that fetches the 10 newest Sentry issues, for each finds the releasing commit via github, and returns a summary array.✓ コピーしました
    → コードブロックと単一の実行結果
  3. 結果を確認
    Summarize the array in English and flag any issue whose releasing commit was by a specific author.✓ コピーしました
    → データに基づいた最終回答

結果: ツール呼び出しのラウンドトリップが10分の1に削減され、大幅なトークン節約を実現しつつ同じ結果を得られます。

注意点
  • stderrを出力しないとサンドボックス内のコードエラーが不透明になる — コードをtry/catchで囲み、キャッチしたエラーを出力することでLLMが自己修正できるようにする
  • ネットワークホワイトリストが厳しすぎて正当な呼び出しがブロックされる — 最初は広めに設定し、ログの実際のホスト使用状況に基づいて絞り込む
組み合わせ: github · sentry

LLMから認証情報を隔離する

👤 MCPを導入するセキュリティ意識の高いチーム ⏱ ~15 min intermediate

使うタイミング: 脅威モデルで「LLMはいかなる形式でもトークンを参照してはならない」とされている場合。

フロー
  1. 認証情報をpctxに保存
    Add a keychain-backed credential to pctx for github.✓ コピーしました
    → 認証情報が保存され、呼び出し元からは参照不可
  2. 反対側から検証
    Ask the LLM to 'print the GitHub token' — confirm it cannot.✓ コピーしました
    → LLMがシークレットにアクセスする手段がない

結果: 「LLMがトークンを流出させることは可能か?」という問いに対する再現可能な回答 — 不可能です。

複数のMCPを1つのサンドボックス化されたコードインターフェースに集約

👤 単一の安全なインターフェースを求めるチーム ⏱ ~25 min advanced

使うタイミング: github、postgres、filesystemを1か所でCode Modeのセマンティクスで使用したい場合。

フロー
  1. 各MCPを登録
    Add github, postgres (read-only), and filesystem (scoped to /data) to pctx.✓ コピーしました
    → 3つすべてがコードから呼び出し可能
  2. MCP横断ジョブを記述
    Write pctx code that reads a SQL query result and writes CSV to /data/out.csv, then creates a GitHub gist with that CSV.✓ コピーしました
    → 単一の実行で3つのアップストリームを使用

結果: 複数のアップストリームを横断するワークフロー向けの、統合されたサンドボックス実行環境。

組み合わせ: github · postgres · filesystem

組み合わせ

他のMCPと組み合わせて10倍の力を

pctx + github + sentry

SentryのIssueとGitHubのコミットを1つのサンドボックス化されたコードブロックでクロスリファレンス

Via pctx Code Mode: for every new Sentry issue, find the GitHub commit that introduced it and return a table.✓ コピーしました
pctx + postgres

クエリ・変換・エクスポートを1つのサンドボックスで完結

pctx code that runs a Postgres read, pivots the result in JS, and writes /data/report.json.✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
execute_code code: str (JavaScript, access to injected MCP SDK) 2回以上のツール呼び出しを組み合わせるタスクの場合に使用 upstream tool calls inside the code
list_upstream_tools (none) エージェントのディスカバリー — コードから呼び出し可能なツールの確認 free

コストと制限

運用コスト

APIクォータ
pctx自体のクォータなし。コード内のアップストリーム呼び出しはそれぞれのクォータが適用されます
呼び出しあたりのトークン
Code Modeは多数の逐次ツール呼び出しと比較して大幅にトークンコストを削減できます
金額
無料、オープンソース
ヒント
5回以上のツール呼び出しを伴うタスクでは、Code Modeは逐次呼び出しと比べて通常50%以上のトークンを節約できます。

セキュリティ

権限、シークレット、影響範囲

認証情報の保管: 環境変数、OSキーチェーン、または外部コマンド — LLMが認証情報を参照することはありません
データ送信先: アップストリームごとに明示的にホワイトリスト登録されたホストのみに送信可能
絶対に付与しない: Allowlist the open internet in the sandbox — pin to specific hosts

トラブルシューティング

よくあるエラーと対処法

Network denied in sandbox

該当ホストをpctxコンフィグのアップストリームのホワイトリストに追加してください。

確認: pctx config show
Credential not injected

認証情報名の不一致です。pctxは起動時に解決されたキーをログに出力します。

確認: pctx run --debug
Code Modeが曖昧な'sandbox violation'を返す

詳細ログを有効にしてください。ほとんどの違反は、LLMが実行すべきでない環境変数またはFSアクセスの試行です。

確認: pctx logs --tail

代替案

pctx 他との比較

代替案代わりに使う場面トレードオフ
proxy-2 / 1mcp-agent集約機能は必要だがCode Mode/サンドボックスは不要な場合LLMが各ツールを個別に呼び出すため、MCPが返すすべての内容を参照可能
Bare execution via shell MCPコード実行は必要だがMCPプロキシは不要な場合認証情報の隔離なし、ホワイトリストなし

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る