MCP server
Tiger ships a standalone binary called tiger-mcp that implements the
Model Context Protocol.
Point it at a collection folder and any MCP-capable client - Claude Desktop, Claude
Code, Cursor, or your own agent - can list, inspect, and execute your saved requests
without leaving the chat.
How it works
The MCP server is a stdio process. The client launches it as a child process, sends
JSON-RPC messages over stdin, and reads responses from stdout. Tiger uses this channel
to advertise four tools backed by the same collection files and environment system
you use inside the app. Nothing is uploaded or proxied: every request travels directly
from the tiger-mcp process to your API.
The server is purely local. Your request payloads, URLs, headers, and response bodies are never sent to any third-party service. The AI client sees only what the tool returns - the same response your browser would see.
What you'd use it for
The point is to let an AI assistant work with the requests your team already maintains in Git - using the real URLs, auth, headers, variables and environments, instead of guessing or pasting curl into the chat. Common uses:
- Agentic testing and debugging. "Run the
create-userrequest against staging and tell me why it returns 401." The assistant reads the request, runs it, and reasons about the response. - Chained workflows. "Call
login, take the token, then run/me." Pairrun_requestwith Tiger's captures and variables to thread values between calls. - Inside an AI coding session. While building against your API in Claude Code or Cursor, the model exercises your real endpoints through curated, environment-aware requests instead of inventing URLs and headers.
- Read-only exploration. "List the requests and summarize what this API does" - handy when onboarding onto an unfamiliar collection.
- Smoke checks and triage. Point an assistant at a collection and ask it to run the health-check requests and flag anything that does not return 2xx.
The four tools
Once registered, the MCP server advertises these tools to the connected client:
| Tool name | Inputs | What it returns |
|---|---|---|
list_requests |
none | All requests in the collection, each with its relative path and display name. |
list_environments |
none | All environment names defined in the collection's environments/ folder. |
get_request |
path - relative path to the .tiger file |
The full parsed request as JSON: method, URL template, headers, body, auth, captures, and scripts. |
run_request |
path - relative path to the .tiger fileenvironment (optional) - environment name to resolve {{variables}}timeoutMs (optional) - request timeout in milliseconds |
HTTP response: status code, response headers, timing, and the response body. |
The AI client can discover every available endpoint by calling
list_requests, inspect the details of a specific one with
get_request, and fire it - with full variable substitution from any
saved environment - using run_request.
Specifying the collection
The server needs to know which collection folder to serve. Pass it as the first
argument on the command line, or set the TIGER_COLLECTION environment
variable. If neither is provided it defaults to the current working directory.
# Argument form
tiger-mcp /path/to/your/collection
# Environment-variable form
TIGER_COLLECTION=/path/to/your/collection tiger-mcp
Setting up Claude Desktop
Open claude_desktop_config.json (on macOS this is
~/Library/Application Support/Claude/claude_desktop_config.json) and
add a tiger entry under mcpServers:
{
"mcpServers": {
"tiger": {
"command": "tiger-mcp",
"args": ["/path/to/your/collection"]
}
}
}
If tiger-mcp is not on your PATH, use the full path to
the binary instead. After saving the file, quit and relaunch Claude Desktop. The
four Tiger tools will appear in the tool picker.
You can register more than one collection by adding additional keys under
mcpServers, each pointing the binary at a different folder. Give them
distinct names, for example tiger-internal and
tiger-public, so the AI client can tell them apart.
Setting up Claude Code
In a project-level .claude/settings.json (or your user-level settings),
add the server under the mcpServers key:
{
"mcpServers": {
"tiger": {
"command": "tiger-mcp",
"args": ["/path/to/your/collection"]
}
}
}
Claude Code picks up the configuration on the next session start. You can also run /mcp from within a session to inspect which servers are connected.
Running via npx (no global install)
If you have cloned the Tiger repository and want to run the MCP server without installing it globally, build the server bundle once and invoke it through Node:
# Build the MCP bundle (one time, from the Tiger repo root)
npm run build:mcp
# Then register it in your MCP client config like this:
{
"mcpServers": {
"tiger": {
"command": "node",
"args": [
"/path/to/tiger/out/mcp/server.mjs",
"/path/to/your/collection"
]
}
}
}
The build step writes out/mcp/server.mjs, a self-contained ESM bundle
with no dependency on the rest of the Tiger renderer or Electron runtime.
Using environments with run_request
If your requests use {{variable}} placeholders - for a base URL, an
auth token, or any other value - pass the environment name when calling
run_request:
// Tool call from an AI client
run_request({
"path": "auth/get-token.tiger",
"environment": "staging"
})
The server resolves all variables from the named environment before sending the request. Secret values (marked as hidden in the app) are applied but never echoed back in the tool's return value.
Use list_environments first to discover which environment names are
available in the collection.
Example session
The following illustrates what a typical AI-assisted workflow looks like once the server is wired up.
// 1. Discover what's in the collection
list_requests()
// → [ { path: "users/list-users.tiger", name: "List users" },
// { path: "users/create-user.tiger", name: "Create user" },
// { path: "auth/get-token.tiger", name: "Get token" } ]
// 2. Inspect the request you care about
get_request({ path: "users/create-user.tiger" })
// → { method: "POST", url: "{{baseUrl}}/users",
// headers: { "Content-Type": "application/json" },
// body: { type: "json", content: "{ \"name\": \"...\", \"email\": \"...\" }" },
// auth: { type: "bearer", token: "{{token}}" }, ... }
// 3. Run it against the staging environment
run_request({ path: "users/create-user.tiger", environment: "staging" })
// → { status: 201, timing: { total: 142 },
// headers: { "content-type": "application/json" },
// body: { "id": "usr_01hx...", "name": "...", "email": "..." } }
What the binary ships with
When you download Tiger, the tiger-mcp binary is bundled inside the
application package and unpacked from the Electron asar archive at runtime, so it
is always available at the same version as the app itself. The binary entry point is
registered in package.json under the bin field
("tiger-mcp": "out/mcp/server.mjs"), meaning a global
npm install -g tiger-api-client also places tiger-mcp on
your PATH.
The MCP server executes requests using the same Node.js HTTP stack as the app.
It does not share the app's cookie jar or any in-memory session state. Captured
variables from a run_request call are returned in the response but are
not automatically written back to the on-disk environment file.
Privacy
The MCP server never phones home. It reads files from the collection folder you
specify and sends HTTP requests to whatever host your .tiger files
point at - that's all. The AI client receives only the tool return value (status,
headers, body). Tiger's optional anonymous analytics cover the desktop app only;
tiger-mcp emits no analytics of its own.