ToolMesh
Let AI agents touch real systems
— safely.
The missing control layer between AI agents and enterprise systems. AI agents access APIs today — without access control, audit trail, or credential protection. ToolMesh makes uncontrolled tool calls a governed, auditable process — and connects any REST API or MCP server in minutes, not months.
Your LLM writes the integration.
Any REST API — agent-ready in minutes.
Stop writing MCP servers. DADL describes any REST API as agent tools in pure YAML — and your LLM can generate it from an existing API spec in minutes.
import { Server } from "@modelcontextprotocol/sdk";
import express from "express";
const app = express();
const server = new Server({ name: "github" });
server.setRequestHandler("tools/list", () => ({
tools: [{
name: "list_repos",
description: "List repositories",
inputSchema: {
type: "object",
properties: {
sort: {
type: "string",
enum: ["created", "updated"]
}
}
}
}]
}));
server.setRequestHandler("tools/call",
async (req) => {
const resp = await fetch(
"https://api.github.com/user/repos",
{ headers: {
Authorization: "Bearer " + TOKEN
}}
);
return { content: [
{ type: "text", text: await resp.text() }
]};
});
app.use(server.transport);
app.listen(3000);
// + error handling, pagination,
// retries, auth refresh, types... spec: "https://dadl.ai/spec/v0.1"
backend:
name: github
type: rest
base_url: https://api.github.com
auth:
type: bearer
credential: github_token
defaults:
pagination:
strategy: link_header
tools:
list_repos:
method: GET
path: /user/repos
description: "List repositories"
params:
sort:
type: string
enum: [created, updated] hetzner-cloud.dadl — 98 tools, ready to use Eliminate the MCP server middleman.
What happens when an agent calls your API?
Agent receives: "List open invoices from Stripe"
trusted stripe_list_invoices sk_live_4eC39HqL... GET /v1/invoices?status=open [REDACTED] Agents calling production systems is terrifying.
Credentials in prompts. No audit trail. No content control. One hallucinated API call away from a data breach.
ToolMesh adds the missing layer.
Every call authenticated, authorized, credential-injected, content-gated, and logged. Fail-closed pipeline — if any check fails, nothing executes.
Any API, integrated in minutes.
Point your LLM at an API spec, get a working DADL file back. No wrapper code, no deployment, no maintenance. Connect more tools — faster than ever.
Architecture at a glance
Every tool call flows through a fail-closed pipeline. If any stage rejects, nothing executes.
What you get
Any API in minutes
30 lines of DADL replace a whole MCP server. LLM-generated from API specs, with auth, pagination, and retries built in.
Scale beyond limits
15 MCP servers at once? Impossible without ToolMesh. Code Mode cuts 50,000+ tokens to ~1,000 — making it work, not just better.
Keep secrets from the model
API keys injected at runtime by the ToolMesh server. The LLM never sees credentials — not in prompts, not in client configs, not in responses.
Control who can do what
Per-tool, per-user authorization via OpenFGA. Example: free users get read-only tools, pro users get everything.
Block unsafe output
JavaScript policies block confidential data before execution, redact PII in responses, enforce compliance rules.
See every call
SQL-queryable audit trail. Every tool invocation attributed to a user, plan, and caller. Answer 'what did that agent do?' with a query.
Know which agent is calling — and trust accordingly.
ToolMesh is the only known MCP gateway that differentiates which AI client triggers each tool call. Claude Code gets full access. An unknown third-party agent gets PII filtering and restricted tools. Same infrastructure, tiered trust.
| CallerClass | PII Filtering | Tool Access |
|---|---|---|
trusted | Credentials only | Full |
standard | High-risk PII + credentials | Full |
untrusted | All PII patterns | Sensitive tools blocked |
Nginx made web apps production-ready — reverse proxy, SSL, load balancing.
ToolMesh makes AI agent tool calls production-ready — authorization, credentials, audit, content gating.
Running in 60 seconds.
git clone https://github.com/DunkelCloud/ToolMesh.git && cd ToolMeshcp .env.example .env.env — set TOOLMESH_AUTH_PASSWORD, TOOLMESH_API_KEY, and your CREDENTIAL_* backend keys. docker compose upclaude mcp add -t http -H "Authorization: Bearer MY_API_KEY" -s user toolmesh http://localhost:8123/mcpconfig/backends.yaml