# Desk by Ouroboros Apps (remote · desk-mcp-continuity2.vercel.app)

Customer support answers, refund rules, and escalation limits for AI assistants

- Trust score: 87/100 (high trust)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `desk-mcp-continuity2.vercel.app`: 87/100 (this document), [markdown](https://verifymcp.io/servers/lahutchins91-desk/desk-mcp-continuity2.md), [page](https://verifymcp.io/servers/lahutchins91-desk/desk-mcp-continuity2)

## Channel facts

- Endpoint: `https://desk-mcp-continuity2.vercel.app/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.0.3`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 94/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 70/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 1352 tokens (~104/item across 13 items; 13 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 87/100
  - Stability observed for 26 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 71/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 88/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 1 of 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "list_refund_rules" implies "refund" and declares readOnlyHint instead, contradicting what its own name says it does.
  - An AI judge read all 14 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the Desk by Ouroboros Apps MCP server?

Desk by Ouroboros Apps is a hosted endpoint at https://desk-mcp-continuity2.vercel.app/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http lahutchins91-desk 'https://desk-mcp-continuity2.vercel.app/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "lahutchins91-desk": {
      "url": "https://desk-mcp-continuity2.vercel.app/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "lahutchins91-desk": {
      "type": "http",
      "url": "https://desk-mcp-continuity2.vercel.app/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.lahutchins91-desk]
url = "https://desk-mcp-continuity2.vercel.app/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "lahutchins91-desk": {
      "type": "remote",
      "url": "https://desk-mcp-continuity2.vercel.app/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add lahutchins91-desk --url 'https://desk-mcp-continuity2.vercel.app/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  lahutchins91-desk:
    url: "https://desk-mcp-continuity2.vercel.app/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "lahutchins91-desk": {
      "Transport": "http",
      "Url": "https://desk-mcp-continuity2.vercel.app/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add lahutchins91-desk -t streamable-http -u 'https://desk-mcp-continuity2.vercel.app/mcp'
```

### Other

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

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 87, +1)

No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-02 (score 86, +1)

No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-30 (score 85, +1)

No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-28 (score 84, +1)

No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-26 (score 83, +1)

No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-24 (score 82, +1)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] The server changed its declared name: Desk → Rampart
- [functional] Server version: 0.1.0 → 1.0.6

### 2026-10-21 (score 81, +1)

No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-19 (score 80, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (13)

### `list_support_desks` (~34 tokens)

list support desks

List this team's support desks. Use the returned id. Do not guess a desk.

Input parameters:

- `offset` (integer)

Output parameters:

- `data`

### `create_support_desk` (~50 tokens)

create support desk

Create a support desk when the user asks for a new policy home. Does not approve answers, refunds, features, or timelines.

Input parameters:

- `description` (string)
- `name` (string, required)

Output parameters:

- `data`

### `save_approved_answer` (~84 tokens)

save approved answer

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.

Input parameters:

- `answer` (string, required)
- `deskId` (string, required)
- `expectedRevision` (integer)
- `question` (string, required)
- `status` (string)
- `topic` (string, required)

Output parameters:

- `data`

### `search_approved_answers` (~82 tokens)

search approved answers

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.

Input parameters:

- `deskId` (string, required)
- `includeRetired` (boolean)
- `offset` (integer)
- `query` (string)

Output parameters:

- `data`

### `save_refund_rule` (~125 tokens)

save refund rule

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.

Input parameters:

- `decision` (string, required)
- `deskId` (string, required)
- `expectedRevision` (integer)
- `matchTerms` (array, required)
- `name` (string, required)
- `remedy` (string, required)
- `status` (string)
- `windowDays`

Output parameters:

- `data`

### `list_refund_rules` (~61 tokens)

list refund rules

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.

Input parameters:

- `deskId` (string, required)
- `includeRetired` (boolean)

Output parameters:

- `data`

### `save_escalation_limit` (~146 tokens)

save escalation limit

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.

Input parameters:

- `allowFeaturePromise` (boolean)
- `allowRefundPromise` (boolean)
- `allowTimelinePromise` (boolean)
- `channel` (string, required)
- `deskId` (string, required)
- `expectedRevision` (integer)
- `maxTier` (string, required)
- `name` (string, required)
- `notes` (string)
- `status` (string)
- `tierLadder` (array, required)

Output parameters:

- `data`

### `list_escalation_limits` (~57 tokens)

list escalation limits

Read escalation limits. A channel with no APPROVED limit cannot promise a refund, feature, or timeline and cannot be given an invented escalation path.

Input parameters:

- `deskId` (string, required)
- `includeRetired` (boolean)

Output parameters:

- `data`

### `save_approved_commitment` (~95 tokens)

save approved commitment

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.

Input parameters:

- `deskId` (string, required)
- `expectedRevision` (integer)
- `kind` (string, required)
- `name` (string, required)
- `statement` (string, required)
- `status` (string)

Output parameters:

- `data`

### `list_approved_commitments` (~63 tokens)

list approved commitments

Read approved feature and timeline statements. Listing them does not approve a different promise. Call evaluate_commitment with the exact wording before saying one.

Input parameters:

- `deskId` (string, required)
- `includeRetired` (boolean)
- `kind` (string)

Output parameters:

- `data`

### `evaluate_commitment` (~99 tokens)

evaluate commitment

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.

Input parameters:

- `channel` (string)
- `deskId` (string, required)
- `kind` (string, required)
- `proposal` (string, required)

Output parameters:

- `data`

### `evaluate_escalation` (~94 tokens)

evaluate escalation

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.

Input parameters:

- `action` (string, required)
- `channel` (string, required)
- `deskId` (string, required)
- `targetTier` (string)

Output parameters:

- `data`

### `get_desk_context` (~111 tokens)

get desk context

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.

Input parameters:

- `deskId` (string, required)
- `limit` (integer)
- `question` (string, required)

Output parameters:

- `data`

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/lahutchins91-desk/desk-mcp-continuity2#diagnostics

## Score history

- 2026-11-05: 87
- 2026-11-04: 87
- 2026-11-03: 86
- 2026-11-02: 86
- 2026-11-01: 85
- 2026-10-31: 85
- 2026-10-30: 85
- 2026-10-29: 84
- 2026-10-28: 84
- 2026-10-27: 83
- 2026-10-26: 83
- 2026-10-25: 82
- 2026-10-24: 82
- 2026-10-23: 81
- 2026-10-22: 81
- 2026-10-21: 81
- 2026-10-20: 80
- 2026-10-19: 80
- 2026-10-18: 79
- 2026-10-17: 79
- 2026-10-16: 78
- 2026-10-15: 78
- 2026-10-14: 77
- 2026-10-13: 77
- 2026-10-12: 76
- 2026-10-10: 75

## Common questions

### What is the Desk by Ouroboros Apps MCP server?

Desk by Ouroboros Apps is an MCP server listed in the public MCP registry as io.github.LAHutchins91/desk. Customer support answers, refund rules, and escalation limits for AI assistants. This page covers its hosted endpoint (https://desk-mcp-continuity2.vercel.app/mcp).

### Is the Desk by Ouroboros Apps MCP server safe to use?

Desk by Ouroboros Apps scores 87 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Desk by Ouroboros Apps MCP server expose?

Desk by Ouroboros Apps exposes 13 tools: list_support_desks, create_support_desk, save_approved_answer, search_approved_answers, save_refund_rule, and 8 more. Their descriptions and schemas cost roughly 1,101 tokens of context every time the server is loaded.

### Does the Desk by Ouroboros Apps MCP server require authentication?

Yes. Desk by Ouroboros Apps asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the Desk by Ouroboros Apps MCP server still maintained?

Desk by Ouroboros Apps is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://desk-mcp-continuity2.vercel.app/mcp
- Repository: https://github.com/LAHutchins91/desk-mcp
- Website: https://ouroborosapps.com/docs/desk
- Changelog RSS feed: https://verifymcp.io/servers/lahutchins91-desk/desk-mcp-continuity2.xml
- Changelog JSON feed: https://verifymcp.io/servers/lahutchins91-desk/desk-mcp-continuity2.json
- HTML version of this page: https://verifymcp.io/servers/lahutchins91-desk/desk-mcp-continuity2
