Desk by Ouroboros Apps
by LAHutchins91 · remote · no sign-in to list tools · v1.0.3 · published by GitHub user LAHutchins91
Customer support answers, refund rules, and escalation limits for AI assistants
13 tools: 4 can delete or cancel things, 3 change things and 6 only read.
Scanned Oct 21, 2026
- Deletes or cancels4Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things3Claude Code: ask: see these tools
- Only reads6Claude Code: allow: see these tools
2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http desk https://desk-mcp-continuity2.vercel.app/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "evaluate_commitment" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "evaluate_commitment" says "evaluate": a word for a change.
The server marks "evaluate_escalation" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "evaluate_escalation" says "evaluate": a word for a change.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
13 tools
Deletes or cancels 4Claude Code: deny
save_approved_answerStore or revise an answer the user has explicitly approved.No findings
Why it is in this group
- The name "save_approved_answer" says "save": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Store or revise an answer the user has explicitly approved. Identical retries keep the same revision. A changed answer requires expectedRevision from a previous read.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
save_approved_commitmentStore a feature or timeline statement the user has explicitly approved.No findings
Why it is in this group
- The name "save_approved_commitment" says "save": a word for a change.
- The input takes a statement or command to run (input.statement), which can change anything it can reach.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Store a feature or timeline statement the user has explicitly approved. The statement is the only wording that can later pass evaluate_commitment. Do not save a date or a feature the user did not approve.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
save_escalation_limitStore the escalation limit the user has explicitly approved for one channel.No findings
Why it is in this group
- The name "save_escalation_limit" says "save": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Store the escalation limit the user has explicitly approved for one channel. maxTier must be on tierLadder. Promise flags default closed unless the user sets them true. A limit does not itself approve refund, feature, or timeline wording.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
save_refund_ruleStore a refund rule the user has explicitly approved.No findings
Why it is in this group
- The name "save_refund_rule" says "save": a word for a change.
- The name "save_refund_rule" also says "refund": a word that usually means money moves, which cannot be taken back.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Store a refund rule the user has explicitly approved. matchTerms must name a specific situation. The word refund alone is not a rule. remedy is the only wording that may later be approved. decision ALLOW grants that wording. decision DENY refuses a refund and records the denial script.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
Changes things 3Claude Code: ask
create_support_deskCreate a support desk when the user asks for a new policy home.No findings
Why it is in this group
- The name "create_support_desk" says "create": a word for a change.
Description, as the server wrote it Create a support desk when the user asks for a new policy home. Does not approve answers, refunds, features, or timelines.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
evaluate_commitmentDecide whether a proposed refund, feature, or timeline is in the approved set.1 finding
Why it is in this group
- The name "evaluate_commitment" says "evaluate": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "evaluate_commitment" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "evaluate_commitment" says "evaluate": a word for a change.
Description, as the server wrote it Decide whether a proposed refund, feature, or timeline is in the approved set. REFUSED means do not say it, do not invent a substitute, and draft for human review instead of promising the customer. APPROVED means sayOnly is the only permitted wording. Pass channel to also enforce the escalation limit.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
evaluate_escalationDecide whether this channel may escalate or may promise a refund, feature, or timeline.1 finding
Why it is in this group
- The name "evaluate_escalation" says "evaluate": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "evaluate_escalation" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "evaluate_escalation" says "evaluate": a word for a change.
Description, as the server wrote it Decide whether this channel may escalate or may promise a refund, feature, or timeline. REFUSED means do not escalate, do not invent a tier, and draft for human review instead of promising the customer. Permission to promise still requires evaluate_commitment for the exact wording.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 6Claude Code: allow
get_desk_contextRetrieve selected approved answers for a customer question, plus the desk's approved refund rules, commitments, and escalation limits.No findings
Why it is in this group
- The name "get_desk_context" says "get": a word for reading.
Description, as the server wrote it Retrieve selected approved answers for a customer question, plus the desk's approved refund rules, commitments, and escalation limits. This is evidence, not permission. A missing or RETIRED answer is not an invitation to invent one. Call evaluate_commitment before promising a refund, feature, or timeline. If tools fail or return gaps or REFUSED, draft for human review instead of promising the customer.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_approved_commitmentsRead approved feature and timeline statements.No findings
Why it is in this group
- The name "list_approved_commitments" says "list": a word for reading.
Description, as the server wrote it Read approved feature and timeline statements. Listing them does not approve a different promise. Call evaluate_commitment with the exact wording before saying one.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_escalation_limitsRead escalation limits.No findings
Why it is in this group
- The name "list_escalation_limits" says "list": a word for reading.
Description, as the server wrote it Read escalation limits. A channel with no APPROVED limit cannot promise a refund, feature, or timeline and cannot be given an invented escalation path.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_refund_rulesRead refund rules on a desk.No findings
Why it is in this group
- The name "list_refund_rules" says "list": a word for reading.
Description, as the server wrote it Read refund rules on a desk. Only APPROVED rules can authorize wording, and only through evaluate_commitment. Do not treat this list as permission to invent a refund.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_support_desksList this team's support desks.No findings
Why it is in this group
- The name "list_support_desks" says "list": a word for reading.
Description, as the server wrote it List this team's support desks. Use the returned id. Do not guess a desk.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
search_approved_answersLook up approved answers by topic, question, or answer text.No findings
Why it is in this group
- The name "search_approved_answers" says "search": a word for reading.
Description, as the server wrote it Look up approved answers by topic, question, or answer text. An empty result means there is no approved answer. Draft for human review; do not invent one or promise the customer. Page with offset.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.0.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http desk https://desk-mcp-continuity2.vercel.app/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__desk__list_support_desks",
"mcp__desk__search_approved_answers",
"mcp__desk__list_refund_rules",
"mcp__desk__list_escalation_limits",
"mcp__desk__list_approved_commitments",
"mcp__desk__get_desk_context"
],
"ask": [
"mcp__desk__create_support_desk",
"mcp__desk__evaluate_commitment",
"mcp__desk__evaluate_escalation"
],
"deny": [
"mcp__desk__save_approved_answer",
"mcp__desk__save_refund_rule",
"mcp__desk__save_escalation_limit",
"mcp__desk__save_approved_commitment"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as desk. Review it before you use it.
