Desk

io.github.LAHutchins91v1.0.1Updated Oct 5, 2026

Approved support answers, refund rules, and escalation limits for AI assistants, over MCP.

Overview

AI-generated overview

Lets an assistant store and look up a support team's approved answers, refund rules, and escalation limits, and check promises against them.

What it does
Desk holds a support team's approved policy and exposes tools to create support desks, save and search approved answers, save and list refund rules, escalation limits, and approved commitments, and fetch desk context. Two evaluation tools check proposed wording: evaluate_commitment returns APPROVED only for wording already stored and otherwise REFUSED, and evaluate_escalation refuses a channel or tier outside the saved limit. The assistant is meant to read this policy before replying rather than inventing a softer promise.
When to use it
Useful for support or customer-facing assistants that must answer within pre-approved wording and refuse refunds, features, or timelines that were never approved. Worth adding when you want a single stored policy the assistant consults before committing to anything.
Requirements
A remote Streamable HTTP endpoint at the server's /mcp path, or a locally run instance (npm install, build, start; Docker image also provided). OAuth sign-in with a Desk account; the README says not to pass an Authorization header or paste an API key or password. Support tools need Pro or an active trial (14 days, then Pro). Hosted accounts use Supabase for sign-in and policy storage and Stripe for billing; local stdio without an account stores policy under DESK_DATA_DIR.
Before you install
The server stores and evaluates policy that shapes what the assistant may promise, so incorrect saved rules can cause wrong refusals or approvals. Tools write data: create_support_desk, save_approved_answer, save_refund_rule, save_escalation_limit, and save_approved_commitment. It requires OAuth sign-in and a paid Pro plan or trial after 14 days; the README says no price is displayed. Do not put an API key or password in a header.

Installation

In SourceWeft

  1. Open Desk in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "desk": {
      "type": "http",
      "url": "https://desk-mcp.vercel.app/mcp"
    }
  }
}

README

Desk

Desk keeps a support team's approved answers, refund rules, and escalation limits, then lets an assistant read that policy before it replies.

An assistant can store and look up what the team has approved. It must refuse a refund, a feature, or a timeline that is not in the approved set. It does not invent a softer promise.

It works with ChatGPT, Claude, Gemini, Grok, and Cursor, plus any other MCP client that can do Streamable HTTP and OAuth. It is not a ChatGPT-only plugin.

Sign in with your Desk account when the assistant opens OAuth. Do not paste an API key or password into a header. Support tools need Pro or an active trial. The trial is 14 days, then Pro. Checkout shows the plan terms. This page does not print a price.

What the assistant can do

After you approve the connection, the server exposes these tools:

  • list_support_desks
  • create_support_desk
  • save_approved_answer
  • search_approved_answers
  • save_refund_rule
  • list_refund_rules
  • save_escalation_limit
  • list_escalation_limits
  • save_approved_commitment
  • list_approved_commitments
  • evaluate_commitment
  • evaluate_escalation
  • get_desk_context

evaluate_commitment returns APPROVED only for wording already stored. Otherwise it returns REFUSED and the assistant must not promise that refund, feature, or timeline. evaluate_escalation refuses a channel or tier that is outside the saved limit. The assistant only calls these tools when you and the host allow it.

Connect

Run the server and use its /mcp path. With the default local base, that is http://localhost:3000/mcp. A deployed host uses the same path on APP_BASE_URL.

Cursor, in ~/.cursor/mcp.json or a project .cursor/mcp.json:

json
{  "mcpServers": {    "desk": {      "url": "http://localhost:3000/mcp"    }  }}

Claude Code:

bash
claude mcp add --transport http desk http://localhost:3000/mcp

Do not pass an Authorization header. Other clients add the same URL, choose OAuth, and leave client id and secret empty. Desk supports dynamic client registration. Full steps for ChatGPT, Claude, Gemini, Grok, and Cursor are on the server's /connect page.

When stdin is a terminal, Desk serves Streamable HTTP. When stdin is not a terminal, it also speaks MCP on stdio. That is the same choice continuity-mcp makes, so a launcher such as Glama can attach stdin.

Registry metadata for this server is in server.json (io.github.LAHutchins91/desk).

Run

bash
npm cinpm testnpm run buildnpm start

Hosted accounts use Supabase for sign-in and policy storage, and Stripe for the 14-day trial and Pro. Copy .env.example to .env and set the variables there. supabase/schema.sql creates the tables. Stripe price ids belong in the environment. Desk never displays the amount.

Local stdio, with no account configured, stores one operator's policy under DESK_DATA_DIR (or the system temp directory). HTTP tool calls still require OAuth and an active trial or Pro.

bash
docker build -t desk-mcp .docker run --rm -p 3000:3000 desk-mcp

A container without a terminal on stdin speaks MCP on stdio and still listens on port 3000.

Source: README.md at commit a85f80a

Tools

0
Tool metadata has not been indexed yet.

Version history

1
  1. v1.0.1LatestOct 5, 2026