Files
Matt Godbolt 5841cc57b7 Prep MCP endpoint for Anthropic connector submission (#8697)
## Summary

Anthropic's [connector review
criteria](https://claude.com/docs/connectors/building/review-criteria)
and [submission
requirements](https://claude.com/docs/connectors/building/submission)
call out two things our `/mcp` endpoint is missing today:

- every tool needs a `title` plus `readOnlyHint` / `destructiveHint`
annotation
- a public docs page covering setup and usage must exist by publish date

This PR adds both:

- **Tool annotations** on all 7 MCP tools (`compile`, `list_compilers`,
`list_languages`, `list_libraries`, `lookup_asm_instruction`,
`generate_short_url`, `get_shortlink_info`). All read-only tools get
`readOnlyHint: true`. `generate_short_url` is marked `readOnlyHint:
false` + `destructiveHint: false` + `idempotentHint: true` (it's
additive and the storage layer dedupes by config hash). Every tool gets
`openWorldHint: false` since none reach out to third-party services.
- **`docs/MCP.md`** describing the endpoint URL, transport, tool
catalogue, and a Claude Code setup line.

A judgement call worth flagging: `compile` is annotated `readOnlyHint:
true` even though `execute=true` runs user code. The CE service is
stateless from the connector's point of view and sandbox effects don't
escape the call, so the hint matches the spirit of the annotation, but
we may want to revisit if Anthropic pushes back during review.

Two known gaps not addressed here, that I'd like to discuss separately
before submission:

- **Origin-header validation** — required by the submission doc as
DNS-rebinding mitigation. The threat model mostly applies to
localhost-bound desktop servers; we're a public HTTPS service with no
auth, so the public REST API's `Allow-Origin: *` posture is consistent.
Suggest asking Anthropic to confirm exemption, or add an allowlist with
a missing-Origin pass-through (Claude Code currently sends none).
- **Submission form prep** — name/tagline/description/screenshots/logo,
and a pass through MCP Inspector. Operational, not code.

## Test plan

- [x] `npm run ts-check`
- [x] `npm run lint`
- [x] `npm run test -- --run mcp` (78 tests pass)
- [x] pre-commit hook runs clean
- [ ] manual smoke test from a fresh Claude Code MCP install (`claude
mcp add --transport http compiler-explorer https://godbolt.org/mcp` once
deployed)
- [ ] confirm tool annotations show up correctly in MCP Inspector

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-05-09 17:37:14 -05:00
..
2023-07-30 18:06:09 -05:00
2026-05-06 10:38:05 -04:00
2020-05-20 12:55:12 +02:00
2026-03-21 21:21:40 +01:00
2018-02-23 09:19:04 -06:00
2026-02-20 12:54:12 +01:00
2025-08-02 16:20:20 -05:00
2022-05-09 23:13:50 -05:00
2022-12-27 18:46:15 -06:00
2022-05-09 23:13:50 -05:00
2023-02-02 20:44:45 +01:00
2024-03-08 22:25:09 -06:00
2025-10-04 16:37:04 +02:00
2020-10-01 23:40:14 +02:00

How do I ?

This is a how-to guide for the user-interface presented by Compiler Explorer. This doesn't cover the details of how to set up or modify Compiler Explorer for your own needs. For that, please check the documents which already cover topics like:

Fast links:

Change the assembly syntax from Intel

Output, intel and at&t

The option to switch assembly from Intel to AT&T syntax is present in the Output option of each compiler. If enough space is not present, the option also presents itself as the gear symbol (⚙)

Compare the time taken by compilation and networking

Brief overview of UI

This is the symbol that looks like a bar graph (📊). If your compilations are taking long, you can use this to check the time taken by:

  • Networking, JavaScript, waiting for events, etc.
  • Checking the cache and retrieving from it on a cache-hit
  • Compilation (on force compilation or cache-miss)
  • Parsing the generated assembly before presenting it

View intermediate information provided by the compilers

Options for GCC Options for Clang

Though both GCC and Clang create supplementary outputs along with assembly (shown by default), and an executable (created if an executor has been added), the exact nature of the outputs and their formats differ between the compilers.

GCC allows the Tree, IPA, RTL and graph outputs, while Clang allows optimization, AST, IR and graph outputs. Some outputs (e.g. RTL or graph) also have a rich set of options in the UI to enable focussing on a particular function or compiler stage.