Files
pad/cmd
xarmian 39a5259551 feat(mcp): the ChatGPT catalog, a one-tool-per-operation projection of /mcp (TASK-3321 U1, stacked on #1707) (#1708)
* feat(mcp): the ChatGPT catalog, a one-tool-per-operation projection of /mcp (TASK-3321 U1)

A second tool surface for OpenAI's plugin directory: 22 tools, each
naming the /mcp (tool, action) it stands for and executed by that tool's
own fan-out handler, so validation, dispatch and every server rule are the
ones /mcp runs. An entry adds only its outward shape: a name, a
description, a narrowed parameter list (types and enums from the source),
its own hints, Fixed inputs (get_item always asks for the agent view), and
the irreversibility justification the submission form asks for.

Guards:
- every /mcp operation and pad_set_workspace is an entry or an exclusion
  with a reason, never both or neither, with no stale names;
- the hints match the ruling, written out independently;
- the validator refuses each defect it exists for;
- every exposed param has a ChatGPT-own description, and no description
  uses /mcp's action vocabulary;
- each ChatGPT tool dispatches exactly as its source (CLI path, args and
  dispatch input) through a recording dispatcher over the real cmdhelp doc;
- an undeclared param is refused before dispatch;
- a new golden pair pins the ChatGPT initialize and tools/list.

/mcp is byte-identical: its golden files do not move. NewServer gains
optional Instructions and Experimental overrides, defaulting to /mcp's.
Not mounted: U2 serves it at its own URL behind a setting, after U1b
(update_item's forced version row, which its description already
promises) and U3 (response minimization).

Claude-Session: https://claude.ai/code/session_01H63zaWhkb5pAafx2WGjrVC

* fix(mcp): ChatGPT catalog keeps field number literals; set_workspace is an exclusion (TASK-3321 U1 review)

Codex round 1:
- P1: the projection re-marshalled the DECODED arguments into
  RawArguments, so a fields number had already lost its literal
  (9007199254740993 -> ...992, 1.10 -> 1.1) before the source handler's
  BUG-3217 path. The caller's raw bytes now go through, with the action
  and Fixed inputs spliced in; a test fails on the old code.
- P2: set_workspace promised an overview it cannot give. On the shared
  server it persists nothing, and the remote transport has no
  BootstrapFetcher, so it returns only a not-persisted note. It is now an
  exclusion with that reason, and get_workspace_overview is the connect
  step.
- P2: link_type routing among the link commands is one disclosed
  operation (relate two items); noted at the entry.

Claude-Session: https://claude.ai/code/session_01H63zaWhkb5pAafx2WGjrVC

* test(mcp): every ChatGPT tool but list_workspaces requires the workspace (TASK-3321 U1)

There is no session workspace on the shared ChatGPT server, so an
optional slug would fall back to nothing. Pins the lead's check on #1708;
red when item_history's workspace is made optional.

Claude-Session: https://claude.ai/code/session_01H63zaWhkb5pAafx2WGjrVC
2026-10-01 23:52:48 -04:00
..