{"name":"io.github.LAHutchins91/desk","slug":"lahutchins91-desk","title":"Desk by Ouroboros Apps","description":"Customer support answers, refund rules, and escalation limits for AI assistants","url":"https://mcp.market/server/lahutchins91-desk","rating":null,"grade":"B","score":81,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":23,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-10-08T22:07:15.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T06:30:43.069Z","last_ok_at":"2026-11-04T06:30:43.069Z","latency_ms":232},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/LAHutchins91/desk-mcp","website":"https://ouroborosapps.com/docs/desk","version":"1.0.3","remotes":[{"type":"streamable-http","url":"https://desk-mcp-continuity2.vercel.app/mcp"}],"packages":[],"tools":[{"name":"create_support_desk","description":"Create a support desk when the user asks for a new policy home. Does not approve answers, refunds, features, or timelines.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":4000}},"required":["name"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"evaluate_commitment","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"deskId":{"type":"string","format":"uuid"},"kind":{"type":"string","enum":["REFUND","FEATURE","TIMELINE"]},"proposal":{"type":"string","minLength":1,"maxLength":2000},"channel":{"type":"string","minLength":1,"maxLength":80}},"required":["deskId","kind","proposal"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"evaluate_escalation","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"deskId":{"type":"string","format":"uuid"},"channel":{"type":"string","minLength":1,"maxLength":80},"action":{"type":"string","enum":["PROMISE_REFUND","PROMISE_FEATURE","PROMISE_TIMELINE","ESCALATE"]},"targetTier":{"type":"string","minLength":1,"maxLength":80}},"required":["deskId","channel","action"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"get_desk_context","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"deskId":{"type":"string","format":"uuid"},"question":{"type":"string","minLength":1,"maxLength":500},"limit":{"type":"integer","minimum":1,"maximum":20,"default":8}},"required":["deskId","question"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_approved_commitments","description":"Read approved feature and timeline statements. Listing them does not approve a different promise. Call evaluate_commitment with the exact wording before saying one.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"deskId":{"type":"string","format":"uuid"},"kind":{"type":"string","enum":["FEATURE","TIMELINE"]},"includeRetired":{"type":"boolean","default":false}},"required":["deskId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_escalation_limits","description":"Read escalation limits. A channel with no APPROVED limit cannot promise a refund, feature, or timeline and cannot be given an invented escalation path.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"deskId":{"type":"string","format":"uuid"},"includeRetired":{"type":"boolean","default":false}},"required":["deskId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_refund_rules","description":"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"deskId":{"type":"string","format":"uuid"},"includeRetired":{"type":"boolean","default":false}},"required":["deskId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"list_support_desks","description":"List this team's support desks. Use the returned id. Do not guess a desk.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"offset":{"type":"integer","minimum":0,"maximum":100000,"default":0}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"save_approved_answer","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"deskId":{"type":"string","format":"uuid"},"topic":{"type":"string","minLength":1,"maxLength":200},"question":{"type":"string","minLength":1,"maxLength":500},"answer":{"type":"string","minLength":1,"maxLength":8000},"status":{"type":"string","enum":["APPROVED","RETIRED"],"default":"APPROVED"},"expectedRevision":{"type":"integer","exclusiveMinimum":0}},"required":["deskId","topic","question","answer"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"save_approved_commitment","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"deskId":{"type":"string","format":"uuid"},"kind":{"type":"string","enum":["FEATURE","TIMELINE"]},"name":{"type":"string","minLength":1,"maxLength":200},"statement":{"type":"string","minLength":1,"maxLength":2000},"status":{"type":"string","enum":["APPROVED","RETIRED"],"default":"APPROVED"},"expectedRevision":{"type":"integer","exclusiveMinimum":0}},"required":["deskId","kind","name","statement"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"save_escalation_limit","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"deskId":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":200},"channel":{"type":"string","minLength":1,"maxLength":80},"tierLadder":{"type":"array","items":{"type":"string","minLength":1,"maxLength":80},"minItems":1,"maxItems":8},"maxTier":{"type":"string","minLength":1,"maxLength":80},"allowRefundPromise":{"type":"boolean","default":false},"allowFeaturePromise":{"type":"boolean","default":false},"allowTimelinePromise":{"type":"boolean","default":false},"notes":{"type":"string","maxLength":4000},"status":{"type":"string","enum":["APPROVED","RETIRED"],"default":"APPROVED"},"expectedRevision":{"type":"integer","exclusiveMinimum":0}},"required":["deskId","name","channel","tierLadder","maxTier"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"save_refund_rule","description":"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.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"deskId":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":200},"matchTerms":{"type":"array","items":{"type":"string","minLength":1,"maxLength":120},"minItems":1,"maxItems":12},"decision":{"type":"string","enum":["ALLOW","DENY"]},"remedy":{"type":"string","minLength":1,"maxLength":4000},"windowDays":{"anyOf":[{"type":"integer","minimum":0,"maximum":3650},{"type":"null"}]},"status":{"type":"string","enum":["APPROVED","RETIRED"],"default":"APPROVED"},"expectedRevision":{"type":"integer","exclusiveMinimum":0}},"required":["deskId","name","matchTerms","decision","remedy"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}},{"name":"search_approved_answers","description":"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.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"deskId":{"type":"string","format":"uuid"},"query":{"type":"string","maxLength":200,"default":""},"offset":{"type":"integer","minimum":0,"maximum":100000,"default":0},"includeRetired":{"type":"boolean","default":false}},"required":["deskId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"}}],"scan":{"score":81,"grade":"B","scanned_at":"2026-10-09T18:59:20.370Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-09T18:59:20.291Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 708ms"]},"poisoning":{"score":15,"max":15,"notes":["13 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 3 write-action tools with no auth"]},"maintenance":{"score":15,"max":15,"notes":["last push 1 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://desk-mcp-continuity2.vercel.app/mcp","reachable":true,"authRequired":false,"latencyMs":708,"serverInfo":{"name":"Desk","version":"0.1.0"}}],"packages":[],"repo":{"found":true,"owner":"LAHutchins91","repo":"desk-mcp","archived":false,"pushedAt":"2026-10-08T22:07:15Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/194047592?v=4","ownerCreatedAt":"2025-01-07T03:37:49Z","license":"MIT"},"icon":{"url":"https://desk-mcp-continuity2.vercel.app/logo.jpg","source":"registry"},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-10-08T22:07:15.000Z","score":23}}}},"grade_history":[],"reviews":[]}