ifivo MCP server
The ifivo MCP server exposes your org's agent control plane to any MCP-compatible assistant: Claude (Desktop or claude.ai), ChatGPT, Gemini. Configure policies, review approvals, engage the kill switch, and audit decisions conversationally.
1. Get your org API key
Sign in, open Settings, and copy the token starting with ifv_. The same key authorizes both REST and MCP.
2. Endpoint
POST https://www.ifivo.com/api/mcp Authorization: Bearer ifv_… Content-Type: application/json
Transport: Streamable HTTP MCP (JSON-RPC 2.0). Supports initialize, tools/list, tools/call, ping.
3. Configure your assistant
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"ifivo": {
"url": "https://www.ifivo.com/api/mcp",
"transport": "streamable-http",
"headers": {
"Authorization": "Bearer ifv_YOUR_ORG_KEY"
}
}
}
}ChatGPT (Enterprise / Team admin)
Admin panel → Connectors → Add custom MCP:
{
"name": "ifivo",
"type": "mcp",
"url": "https://www.ifivo.com/api/mcp",
"authorization": "Bearer ifv_YOUR_ORG_KEY"
}Gemini
// @google/genai MCP client
import { McpClient } from "@google/genai/mcp";
const ifivo = new McpClient({
url: "https://www.ifivo.com/api/mcp",
headers: { Authorization: "Bearer ifv_YOUR_ORG_KEY" },
});
await ifivo.connect();
const tools = await ifivo.listTools();4. Tools exposed
Every tool returns JSON Schema input via tools/list. The five core tools an agent should reach for:
list_pending_approvals
Read-only. Approvals awaiting a human.
Input
{
limit?: number, // default 50, max 200
agent_id?: string // UUID or agent name
}Output
{
approvals: [{
id, transaction_id, agent, action_type, vendor,
amount_cents, reason, created_at, expires_at
}]
}curl example
curl -sS -X POST https://www.ifivo.com/api/mcp \
-H "Authorization: Bearer ifv_YOUR_ORG_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"list_pending_approvals","arguments":{"limit":10}}}'approve_request
Resolve a pending approval as approved. Reason is optional but recommended.
Input
{
approval_id: string, // approval UUID OR transaction UUID
reason?: string
}Output
{ ok: true, decision: "approved", at: ISO_timestamp,
approval_id, transaction_id }curl example
curl -sS -X POST https://www.ifivo.com/api/mcp \
-H "Authorization: Bearer ifv_YOUR_ORG_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"approve_request","arguments":{"approval_id":"<uuid>","reason":"vendor verified"}}}'deny_request
Resolve a pending approval as denied. Reason is REQUIRED so audit logs capture intent.
Input
{
approval_id: string, // approval UUID OR transaction UUID
reason: string // required
}Output
{ ok: true, decision: "denied", at: ISO_timestamp,
approval_id, transaction_id }curl example
curl -sS -X POST https://www.ifivo.com/api/mcp \
-H "Authorization: Bearer ifv_YOUR_ORG_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"deny_request","arguments":{"approval_id":"<uuid>","reason":"out of policy"}}}'list_recent_decisions
Read-only. Last N gateway decisions across the org. Useful for daily recaps.
Input
{
agent_id?: string, // UUID or agent name
limit?: number // default 25, max 200
}Output
{
decisions: [{
transaction_id, created_at, agent, agent_id,
vendor, action, amount_cents, decision, reason, policy
}]
}curl example
curl -sS -X POST https://www.ifivo.com/api/mcp \
-H "Authorization: Bearer ifv_YOUR_ORG_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":5,"method":"tools/call","params":{"name":"list_recent_decisions","arguments":{"limit":25}}}'get_agent_status
Operational state of a single agent.
Input
{ agent_id: string } // UUID or agent nameOutput
{
agent_id, agent, frozen, quarantined, killed,
org_kill_switch_engaged, last_action_at
}curl example
curl -sS -X POST https://www.ifivo.com/api/mcp \
-H "Authorization: Bearer ifv_YOUR_ORG_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":6,"method":"tools/call","params":{"name":"get_agent_status","arguments":{"agent_id":"refund-bot"}}}'Additional tools
list_agents: status, budget, today's spendlist_transactions: filter by status/agentapprove_transaction/deny_transaction: legacy aliases that take a transaction UUID directlyengage_org_kill_switch/release_org_kill_switchquarantine_agentcreate_policy: deterministic rules (AND semantics)summarize_today: natural-language daily recap
5. Discovery from the terminal
curl -sS -X POST https://www.ifivo.com/api/mcp \
-H "Authorization: Bearer ifv_YOUR_ORG_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'6. Example prompts (once connected)
- “What approvals are pending right now?”
- “Approve the refund for inv_123.”
- “Deny the wire above $50k and explain why.”
- “Show the last 25 gateway decisions for the marketing-bot.”
- “Is the support-refund agent quarantined?”