MCP Toolshed
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Toolshedwhat tools are available for sending notifications and what are their rate limits?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Toolshed
MCP Toolshed is a pluggable, policy-aware MCP server that gives agents one controlled catalogue of tools while the actual providers remain distributed across private networks, clusters, cloud accounts, and external vendors.
It is designed to run behind an identity-aware gateway such as Kong. It can also call an independent Agentic Firewall-compatible inspection service before and after provider execution. The projects communicate through HTTP contracts; they do not need to share source code or a database.
This repository is a reference implementation. The bundled providers, identities, endpoints, and Kubernetes resources contain synthetic example data and must be replaced before production deployment.
Why a toolshed
Agents should not receive unrestricted network access, provider credentials, or every tool that happens to be online. Toolshed introduces a stable control point between an authorized MCP request and separately owned tool providers.
It provides:
filtered
tools/listresults for each verified agent client ID;search_toolsandget_tool_schemafor large catalogues;fixed, administrator-owned provider destinations;
explicit
internalorexternalnetwork scope independent of protocol;pinned input and output JSON Schemas;
per-agent/per-tool rate limits and per-tool concurrency limits;
provider-wide bulkheads;
separate provider credentials that are never taken from tool arguments;
Agentic Firewall ingress and egress inspection;
production-deny-by-default external MCP connectivity;
explicit private-tunnel or controlled-proxy egress with optional mTLS;
remote redirects and inherited environment proxies disabled;
result-size limits, credential-field redaction, and untrusted-output marking;
structured audit events without logging arguments or provider responses; and
internal HTTP and remote Streamable HTTP MCP provider adapters.
Related MCP server: MCP Tool-Calling Agent
Architecture
flowchart LR
Agent["Agent runtime\nMCP client"]
Kong["Kong Gateway\nidentity, traffic controls"]
Enforcer["Authorization enforcer\ntrusted action + OPA + approval"]
Toolshed["MCP Toolshed\ndiscovery, schemas, quotas, dispatch"]
Firewall["Agentic Firewall\ningress and egress inspection"]
Registry["Reviewed tool registry"]
Redis["Redis\nshared quotas"]
Egress["Private tunnel or egress gateway\nnetwork destination enforcement"]
subgraph Providers["Separately hosted providers"]
Internal["Internal REST tools"]
Remote["Remote MCP servers"]
SaaS["SaaS and cloud APIs"]
end
Agent -->|"JSON-RPC /mcp"| Kong --> Enforcer --> Toolshed
Registry -. "allowed tools, schemas, fixed endpoints" .-> Toolshed
Redis -. "multi-replica counters" .-> Toolshed
Toolshed -. "inspect arguments and results" .-> Firewall
Toolshed --> Internal
Toolshed --> Egress --> Remote
Egress --> SaaSThe MCP request happens in the agent's MCP client. The client sends JSON-RPC to
Kong /mcp; it does not embed this server. After gateway authorization,
Toolshed selects a reviewed provider from its registry and performs the final
dispatch.
Agentic Firewall participates twice in each dispatch: before provider execution and before the result is returned. External providers are blocked by default in production. See ARCHITECTURE.md for the full trust-boundary and data-flow view.
Request and response flow
The agent obtains an access token and sends an MCP request to Kong.
Kong applies route, size, rate, and telemetry controls.
The authorization enforcer verifies identity, creates a trusted action, checks approval when required, and asks OPA.
The enforcer removes caller-supplied trusted headers, recreates verified identity context, and forwards the allowed request to Toolshed.
Toolshed exposes only tools assigned to the verified agent client ID.
For a tool call, Toolshed validates arguments against the pinned schema and applies the agent/tool quota and concurrency budgets.
Agentic Firewall inspects the arguments. In
enforcemode, an outage or non-allow decision blocks execution.Toolshed calls the fixed provider endpoint with only that provider's credential. Remote MCP calls must also pass the selected
blocked,private, orproxynetwork mode. The caller cannot supply a destination, credential, proxy, or route.Toolshed bounds and validates the result, redacts credential-shaped fields, and asks Agentic Firewall to inspect the response.
The result is marked
untrusted_tool_output, assigned an audit event ID, and returned through the gateway to the agent.
Included demonstration tools
The examples prove that providers do not need to live with Toolshed:
Public tool | Transport | Demonstrates |
| Internal HTTP | A private business or operations API |
| Remote MCP | A separately hosted external-style MCP server |
Both return synthetic status data. No real service credentials or customer information are included.
Real-world workflow
Consider an incident-response agent that needs tools owned by several teams:
It searches Toolshed and sees only the incident, cloud-read, ticketing, and approved remediation tools assigned to its identity.
It calls an internal findings provider using a narrowly scoped workload credential held by that provider connector.
It attaches sanitized evidence through an external ticketing provider. The SaaS token stays in the connector secret and never enters the prompt.
It requests a destructive production action. The upstream gateway requires a human approval bound to the exact actor, tool, environment, and argument digest before Toolshed receives the call.
Toolshed validates the approved arguments, inspects them, applies quotas, and dispatches to a provider whose cloud role or Kubernetes service account permits only that narrow operation.
The result is validated and inspected before the agent receives it, with an event ID connecting gateway, approval, Toolshed, and provider audit records.
This preserves separate security boundaries: the gateway controls access, Agentic Firewall controls content, Toolshed controls discovery and dispatch, and each provider retains native least privilege.
Security model
Toolshed treats its registry as reviewed control-plane configuration. Agents cannot add providers, change schemas, alter allowlists, or supply URLs.
The trusted identity headers are safe only behind an enforcer that strips caller values and recreates them after authentication. The supplied Kubernetes NetworkPolicy restricts Toolshed ingress to the example MCP enforcer labels. For stronger production identity, add mTLS or service-mesh workload identity.
Agentic Firewall modes are:
disabled: no inspection dependency;audit: record inspection failures and non-allow decisions without blocking;enforce: fail closed on inspection outage or any non-allow decision.
See SECURITY.md before deployment. The checks completed for this public baseline are recorded in SECURITY-REVIEW.md. Deployment patterns for VPN/private endpoints, egress gateways, and mTLS are in Secure external connectivity.
Scaling
Toolshed is stateless for MCP request processing and uses Streamable HTTP in stateless JSON-response mode. The Kubernetes example starts three replicas and includes an HPA, topology spreading, health probes, and a PodDisruptionBudget.
For multiple replicas, configure Redis so per-agent/per-tool quotas are shared. The in-memory limiter is for a single development process only. Concurrency semaphores remain per replica, so combine them with provider-side quotas or a distributed concurrency control when a provider has a strict global limit.
At larger scale:
partition high-risk or high-volume providers into separate Toolshed pools;
autoscale on request latency, active work, provider saturation, and CPU;
apply per-agent, per-tool, per-provider, and global budgets;
use queues and job IDs for long-running or asynchronous operations;
keep session state external if stateful MCP sessions are introduced;
route external providers through controlled egress; and
scale Agentic Firewall, Redis, gateway enforcers, and providers independently.
Quick start
Requirements:
Python 3.11 or newer; or
Docker with Docker Compose.
Python development environment:
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e ".[test,scale]"
.\.venv\Scripts\python.exe -m pytest -qDocker demonstration:
Copy-Item .env.example .env
docker compose up --buildThe Compose demonstration requires trusted identity headers because it models
the production boundary. It defaults Agentic Firewall to audit, allowing the
synthetic providers to run when no local inspection service is available.
Never expose this demonstration to an untrusted network.
Configuration
Variable | Default | Purpose |
|
| Reviewed provider and tool registry |
|
| Enables production endpoint validation when set to |
|
| Requires trusted identity headers on MCP routes |
|
| Agentic Firewall-compatible service base URL |
|
|
|
| unset | Enables shared rate-limit counters |
|
| Remote MCP route: |
| unset | Comma-separated private DNS suffix allowlist for |
| unset | Single explicit HTTPS gateway origin for |
| system trust | Optional private CA bundle |
| unset | Optional mTLS client certificate; requires key |
| unset | Optional mTLS private key; requires certificate |
Provider credentials use environment-variable names declared by auth_env in
the registry. Store their values in a secret manager or workload secret; never
commit them.
Add a provider
Deploy the provider in its own appropriate network and trust boundary.
Add its fixed endpoint, protocol transport, explicit
network_scope, timeout, concurrency, and optional credential environment-variable name toconfig/tool-registry.json. External scope applies the secure route to HTTP tools and remote MCP servers alike.Add reviewed public tool names, remote names, schemas, risk labels, quotas, output limits, tags, and explicit agent client-ID allowlists.
Permit only the required destination through controlled egress.
Test allow, deny, malformed input, malformed output, timeout, oversized output, inspection block, and provider-unavailable paths.
Do not automatically import provider-supplied descriptions or schemas into a production registry. A compromised provider must not be able to silently add a tool or change its contract.
Kubernetes deployment
The files under deployments/kubernetes are demonstration resources. Replace
all REPLACE_ME images, example identities, internal service names, registry
data, environment values, and secret references.
The mcp-service name and port match the upstream expected by the companion
Kong example. If that Service already exists, retain the existing Service and
apply only the compatible Deployment and supporting resources.
The Agentic Firewall integration uses that project's actual
app.kubernetes.io/name: ai-content-firewall workload label and expects its
Service in an agentic-firewall namespace. Change the namespace value if you
deploy one of the project's tenant overlays. The base egress policy also pins
the demo providers and optional Redis dependency by exact workload labels and
ports.
egress-proxy.example.yaml and private-tunnel-egress.example.yaml are
mutually exclusive starting profiles. They add narrow routes to the default
deny; they do not deploy a VPN or gateway. The platform team must supply that
infrastructure and corresponding provider-side restrictions.
Project layout
toolshed/ MCP server and enforcement runtime
config/tool-registry.json reviewed example registry
providers/internal_status/ separate internal HTTP example
providers/external_status/ separate remote MCP example
deployments/kubernetes/ demonstration scaling and isolation resources
docs/ production connectivity guidance
tests/ behavior and security regression testsVerification
.\scripts\Verify.ps1The verification gate runs tests, Ruff, Bandit, dependency consistency and vulnerability checks, YAML parsing, Dockerfile checks, and secret-signature scanning. A Docker image build and image scan remain release-environment checks when no daemon is available.
The main runtime image installs from requirements.lock with hash checking.
Regenerate it after an intentional dependency change with:
.\.venv\Scripts\pip-compile.exe --generate-hashes --extra scale --output-file requirements.lock pyproject.tomlThis server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to discover and execute tools via a secure MCP server with JWT authentication, RBAC, rate limiting, and audit logging.1MIT
- FlicenseNot gradedqualityCmaintenanceEnables an LLM to dynamically discover and call tools across multiple MCP servers (file, GitHub, SQL, Python execution) with authentication, rate limiting, and observability, supporting parallel execution and secure deployment.
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to safely call MCP tools through a security gateway that enforces per-role authorization and least-privilege tool scoping.
- AlicenseAqualityBmaintenanceEnables agents to search a lightweight catalog, inspect permissions, lazily start trusted MCP servers, and call child tools without keeping all schemas in context. It also loads approved skills on demand and routes third-party additions through a human approval queue.1MIT
Related MCP Connectors
Runtime permission, approval, and audit layer for AI agent tool execution.
See, price, and control every tool call your AI agents make: policy checks, cost, and audit tools.
Discover, search, invoke, and rate A2A (Agent-to-Agent) protocol agents.
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/derrickSh43/MCP-Toolshed'
If you have feedback or need assistance with the MCP directory API, please join our Discord server