Use

MCP Registry identities

Resolve official MCP Registry v0.1 identities from apm.yml on ht install.

ht install and apply-from-manifest resolve dependencies.mcp registry strings from MCP Registry v0.1. Identities look like io.github.github/github-mcp-server, with an optional @version pin. This is the same native MCP emit path existing serializers already use — not a second resolver, not a CLI release, and not Microsoft's apm binary. apm.yml, apm.lock.yaml, and the environments mapping stay the project files they already were.

dependencies:
  mcp:
    - io.github.github/github-mcp-server
    - io.github.github/github-mcp-server@1.11.0
    - name: filesystem
      registry: false
      command: npx
      args: ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"]
ht install
ht install --mcp io.github.github/github-mcp-server --target cursor
ht mcp search github
ht mcp list
ht mcp show io.github.github/github-mcp-server
ht mcp install io.github.github/github-mcp-server --target cursor

ht mcp install <id> is an alias of ht install --mcp <id>: append the identity to apm.yml dependencies.mcp, then run the same install.

Registry fetch

Registry strings fetch:

GET https://registry.modelcontextprotocol.io/v0.1/servers/{urlencoded-id}/versions/{latest|pin}

Override the host with HARNESSTAP_MCP_REGISTRY_URL. ht mcp search is GET /v0.1/servers?search=. ht mcp list is GET /v0.1/servers with cursor pagination. ht mcp show fetches /v0.1/servers/{id}/versions/latest and prints the native config HT would emit. Search, list, and show are discovery only; they do not mutate apm.yml.

How identities resolve

  1. Prefer a registry remotes[] HTTP/SSE URL when present. GitHub MCP uses https://api.githubcopilot.com/mcp/ plus an ${AUTHORIZATION} placeholder (Bearer ${AUTHORIZATION}).
  2. Otherwise pick the first package in npmocipypinuget order and emit npx / docker run -i --rm / uvx / dnx.
  3. Write the same native MCP files existing serializers already emit (.cursor/mcp.json, .mcp.json, and the other harness MCP files HT already serializes). Secret env and headers stay ${VAR} placeholders.

Self-defined entries (registry: false with command / url) skip the registry. Command or URL authored inline also skip the registry.

Append and rollback

ht install --mcp / ht mcp install snapshot apm.yml, append the identity, then run install. If install fails or --dry-run is set, the manifest write is restored to the prior bytes.

Trust and targets

Executable parking is unchanged: depth > 0 when executables: is on. Root-manifest MCP is depth 0 and is not a new trust path. Root dependencies.mcp (including registry ids) is the CLI #159 path. Target selection is unchanged from CLI #157: --target / --all / --harness, then targets:, then prefs, then filesystem. No second target pipeline.

Out of scope

Not shipped here:

  • Runtime MCP sandbox
  • GitHub PAT auto-header injection
  • VS Code / JetBrains / Windsurf / Kiro adapters HT does not already serialize
  • Signing / SLSA / Microsoft's apm binary
  • LSP

See also: Install, Apply, Executable trust, Compile and targets, Command reference.