Less noise. Better agents. tap is one MCP server that stands in for all of yours. Your agent loads two tools instead of every tool from every server, and finds the rest when it needs them.

Get tapRead the source

One binary, no Node runtime. Ready in 3 ms. Linux and macOS.

Every tool, before the first word. Each MCP server you connect loads every one of its tools into your agent’s context, used or not. These are real servers, with the tools they list today. Pick the ones you use.

Your agent’s context47,700 of 200,000 tokens

  • github.add_comment_to_pending_review
  • github.list_issue_fields
  • supabase.search_docs
  • supabase.create_branch
  • cloudflare.r2_put_object
  • cloudflare.queue_update_visibility
  • cloudflare.service_binding_delete
  • cloudflare.version_rollback
  • notion.API-retrieve-a-database
  • playwright.browser_click
  • github.add_issue_comment
  • github.list_issue_types
  • supabase.list_organizations
  • supabase.list_branches
  • cloudflare.r2_delete_object
  • cloudflare.ai_inference
  • cloudflare.service_binding_list
  • cloudflare.wrangler_config_get
  • notion.API-move-page
  • playwright.browser_drag
  • github.add_reply_to_pull_request_comment
  • github.list_issues
  • supabase.get_organization
  • supabase.delete_branch
  • cloudflare.d1_list_databases
  • cloudflare.ai_list_models
  • cloudflare.service_binding_update
  • cloudflare.wrangler_config_update
  • notion.API-retrieve-page-markdown
  • playwright.browser_hover
  • and 183201 more
  • plugin_searchFinds a tool on any server, with what it takes to call it.
  • plugin_callRuns one by its id.
  • The rest is room for the work.

tap is off. 213 tools load as your agent starts: 24% of its context, before your first word.

Why put tap in between. Every agent you use keeps its own list of servers and loads all of their tools. With tap in between, each agent keeps one server and loads two tools.

Without tap

Tools loaded213

Context used47,700 tokens

Servers startedAll five, every session

Adding a serverEdit every agent’s config

ConfigThree files, three formats

With tap

Tools loaded2

Context used300 tokens

Servers startedNone until tap is used

Adding a serverOne command, no restart

ConfigOne file for every agent

Small and quick. Measured against mcpzip, lazy-mcp and mcp-funnel, three other proxies that load a few tools in place of all of them, on the same machine with the same five servers. Medians of 30 runs.

3 ms to be ready. What your agent waits for as it starts.

  • tap3.3 ms
  • mcpzip6 ms
  • lazy-mcp138 ms
  • mcp-funnel150 ms

7.5 ms to a first result. Start, find a tool, call it.

  • tap7.5 ms
  • mcpzip8.6 ms
  • lazy-mcp143 ms
  • mcp-funnel152 ms

18 MB of memory at its peak. With 213 tools behind it.

  • tap18 MB
  • mcpzip23 MB
  • lazy-mcp69 MB
  • mcp-funnel100 MB

300 tokens in your agent’s context. The tools each one loads.

  • tap300 tokens
  • mcpzip320 tokens
  • lazy-mcp520 tokens
  • mcp-funnel570 tokens

Set it up once. Three steps. After that a new server is one command, and your agents find it on their next search.

More than one machine? One can serve its servers to the rest over HTTPS, so there is one set to keep. How remote works

  1. Install tap. It needs Go 1.26 or newer. Other ways to install

    Terminal

    go install github.com/fschrhunt/tap/cmd/tap@latest
  2. Connect your agent. tap becomes the one MCP server it starts. One command connects every agent it finds. What tap connect does

    Terminal

    tap connect

    Or wire it up yourself:

    Your agent

    Terminal

    claude mcp add --scope user tap -- tap

    ~/.codex/config.toml

    [mcp_servers.tap]
    command = "tap"

    opencode.jsonc

    {
      "mcp": {
        "servers": {
          "tap": { "type": "local", "command": ["tap"] }
        }
      }
    }

    Your client’s MCP config

    {
      "mcpServers": {
        "tap": { "command": "tap" }
      }
    }
  3. Move your servers behind it. Import the ones your agents already have, or add one by its address or its command. A server that has you sign in takes one more command. Every option

    Terminal

    tap import
    tap add playwright -- npx -y @playwright/mcp@latest
    tap add linear https://mcp.linear.app/mcp
    tap auth linear