Skip to content

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

Deletes · 4Changes · 3

13 tools: 4 can delete or cancel things, 3 change things and 6 only read.

Scanned Oct 21, 2026

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/mcp

Findings

Matches of fixed checks, with the text they matched.

2 warn
  • The server marks "evaluate_commitment" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "evaluate_commitment" says "evaluate": a word for a change.

    What this check looks for
  • The server marks "evaluate_escalation" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "evaluate_escalation" says "evaluate": a word for a change.

    What this check looks for

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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "evaluate_commitment" says "evaluate": a word for a change.

      What this check looks for
    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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "evaluate_escalation" says "evaluate": a word for a change.

      What this check looks for
    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/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.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.