raposa-mcp
Officialraposa-mcp
An MCP server that gives your agent one honest tool: ask a human.
request_human_approval(action, context, risk) -> { approved: true|false, decided_by, ... }approved is true only when a named person pressed Approve. A timeout, an expiry or a rejection all
return approved: false — silence is not consent. Every decision is sealed in Raposa's hash-chained
audit log, exportable for an auditor. EU-hosted, DPA available.
Install
{
"mcpServers": {
"raposa": {
"command": "uvx",
"args": ["raposa-mcp"],
"env": { "RAPOSA_API_KEY": "<your key>" }
}
}
}Claude Code: claude mcp add raposa -e RAPOSA_API_KEY=<your key> -- uvx raposa-mcp
Get a free sandbox key (100 approvals a month) at https://raposa.group/start/ — it arrives by email in a minute.
Related MCP server: final-approval
Tools
Tool | What it does |
| creates the request and waits for a human; returns |
| returns the id at once; decision arrives on the HMAC-signed webhook or via |
| reads one approval |
risk is low | medium | high. The API key is read from RAPOSA_API_KEY only and never appears in tool
inputs or outputs. Base URL override: RAPOSA_API_BASE (default https://dcescrypt.com/api).
Who approves
The people on your team who hold the approve button get a scoped console login and, if you give us their email, every request also reaches them as a mail with signed Approve / Reject links. Their name is recorded on the decision. Docs: https://raposa.group/docs/#approvers
Develop
pip install -e ".[test]" && pytest -qMIT · DC ESCRYPT SL · contact@raposa.group
Available Tools
3 toolscreate_approvalB
Create an approval request and return its id immediately (no waiting). Use with a webhook_url, or poll with get_approval. risk: low | medium | high.
| Name | Required | Description | Default |
|---|---|---|---|
| risk | Yes | ||
| action | Yes | ||
| context | Yes | ||
| webhook_url | No | ||
| requested_by | No | mcp-agent | |
| expires_in_sec | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden. It does reveal the non-blocking, asynchronous behavior ('no waiting') and the webhook/poll follow-up pattern, which is valuable. But it omits what happens after creation, whether approval may be automatic, or any side effects or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler; the core behavior is front-loaded and the usage follow-up is compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an output schema, the description lacks meaning for four of six parameters and fails to contrast with request_human_approval. It captures the creation flow but is incomplete for correct invocation in all cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It explains risk's allowed values (low|medium|high) and hints at webhook_url's role, but leaves action, context, requested_by, and expires_in_sec without any semantic guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific operation ('Create an approval request') and the key outcome ('return its id immediately'), so the core purpose is unmistakable. It explicitly references get_approval for polling, distinguishing it from that sibling, but it does not differentiate from request_human_approval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives two concrete usage modes: supply a webhook_url, or poll with get_approval. However, it never says when create_approval should be chosen over request_human_approval, and provides no when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_approvalA
Read an approval by id. Look at approved — it is true only when a human approved.
| Name | Required | Description | Default |
|---|---|---|---|
| approval_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden. It correctly indicates a read operation and adds useful field-level behavior: 'approved' is true only when a human approved. This goes beyond a generic 'get by id' and clarifies an important semantic detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences with no filler. The core operation is front-loaded, and the second sentence adds a valuable semantic nuance about the 'approved' field.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with an output schema available, the description is mostly complete. It states the purpose, the lookup key, and the key field semantics. The only small gap is not explicitly documenting the approval_id parameter beyond 'by id,' but the input schema already makes that required parameter visible.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only implicitly references the parameter through 'by id.' It does not directly explain that approval_id is the approval's unique identifier or provide any format expectations, leaving the agent to infer the mapping.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and object: 'Read an approval by id.' This clearly identifies the operation and resource, and it is easy to distinguish from the sibling tools create_approval and request_human_approval, which are write/request operations rather than reads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this tool when you need to read an approval by its id. It does not explicitly name alternatives or state when not to use them, but the read-versus-create/request distinction is clear enough from the sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_human_approvalA
Ask an authorised human to approve an action and wait for the answer. Returns {approved: bool, status, decided_by, ...}. Proceed ONLY if approved is true — a timeout, an expiry or a rejection means do not proceed. risk: low | medium | high.
| Name | Required | Description | Default |
|---|---|---|---|
| risk | Yes | ||
| action | Yes | ||
| context | Yes | ||
| wait_sec | No | ||
| requested_by | No | mcp-agent | |
| expires_in_sec | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does this well by explaining that the tool waits, returns a structured result, and that only approved=true means proceed, while timeout, expiry, or rejection means do not proceed. It also enumerates acceptable risk values, giving the agent actionable safety semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with every sentence providing necessary information: the action, the return shape, the proceed condition, and the risk vocabulary. There is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives strong core semantics and the output schema likely covers return values, but it leaves gaps around parameter meanings and does not explain when to prefer this over the sibling create_approval/get_approval tools. For a 6-parameter tool with no input schema descriptions and no annotations, more guidance is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for missing parameter documentation. It only clarifies the risk parameter by listing low | medium | high. The important parameters action, context, wait_sec, requested_by, and expires_in_sec are left to be inferred from their names, which is insufficient for reliable invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action: 'Ask an authorised human to approve an action and wait for the answer.' It identifies both the verb and the resource, and the waiting/returning behavior distinguishes it from siblings like create_approval and get_approval without needing to read their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when human approval is needed and you can wait for the decision. However, it does not explicitly contrast with the sibling tools create_approval or get_approval, so the agent is left to infer which one to pick for asynchronous creation or later retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
3 tool updates
v0.1.1- First observed
create_approval - First observed
get_approval - First observed
request_human_approval
TDQS
Each tool has a clearly distinct purpose: create_approval is fire-and-forget async, get_approval is read-only polling, and request_human_approval is synchronous waiting. The descriptions explicitly differentiate the workflows, leaving no ambiguity.
create_approval and get_approval follow a clean verb_noun pattern, while request_human_approval deviates slightly by inserting 'human' into the noun phrase. Still, the overall pattern remains readable and predictable.
Three tools is well-scoped for a focused human-approval server. Each tool fulfills a necessary role: async creation, status lookup, and synchronous approval waiting. No redundant tools exist.
The core approval lifecycle (create, read, wait) is covered with no dead ends for the primary use cases. A list or cancel operation would be a minor gap, but the three tools support the main workflow effectively.
Maintenance
Related MCP Connectors
Human-in-the-loop for AI coding agents — ask questions, get approvals via Slack.
Human-in-the-loop review and approval for AI agents. Audit trail, approval policies, native MCP.
Human-in-the-loop approval for agent actions, with verifiable action-bound receipts.
EU AI Act Art-14 runtime oversight: allow / flag / gate-to-human on an agent action, with receipt.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to pause execution at critical decision points and request human review before proceeding. Provides tools for creating interrupts, polling for decisions, and managing approvals through a simple REST API interface.21MIT
- AlicenseAqualityDmaintenanceHuman-in-the-loop approval gate for AI agents. Your agent calls submit_approval before any irreversible action; a human reviews on a branded page; a signed webhook fires back with the decision.11MIT
- AlicenseNot gradedqualityCmaintenancePauses AI agent execution and routes approval requests to humans via Slack or email, with cryptographically signed proof of the human's decision.52MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to request human approvals with customizable forms, webhooks, and team features.69MIT
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/agentlabbusiness/raposa-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server