MCP: claim_subdomain and bind_subdomain tools need a design first (the daemon models routes, not reservations)
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 35/100
- Issue type
- Documentation
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- go
- Domain
- api, backend-api-design, cli, documentation
Research direction
Start by reading #1971 and the existing route-tool conventions, then inspect the .proto definitions and the MCP and CLI entry points for route operations. Write the design under docs/architecture/, choosing an ownership model, naming the motivating agent workflow, and specifying RPCs, CLI verbs, tool schemas, scopes, and the downstream contract. Done means implementation issues with separate acceptance criteria are filed and no code is changed.
Written by the indexing model from the issue text.
Description
Follow-up to the decision on #1971. This issue is the design for two new MCP tools, not their implementation.
Decision this comes from
The sprint owner decided on 2026-09-28 to add claim_subdomain (a bare reservation with no bind) and bind_subdomain (rebind an existing claim by id) to the MCP tool surface. list_subdomains and delete_subdomain are not being added: list_routes and delete_route already cover them. (The one-line list_routes description tweak suggested in #1971 was not part of this decision; it is independent and cheap.)
Problem
expose_port claims and binds in one upsert, and no RPC returns a claim without also binding it. So a bare reservation cannot be expressed today, and there is nothing for a claim_subdomain tool to wrap.
The first question the design must answer, before any code
The daemon models routes. A reservation that exists without a bound route, and that counts against a quota, is a concept that today lives only in a hosted control plane running on top of the daemon. Adding these tools raises an ownership question:
- A. The daemon grows a reservation model of its own, with an RPC to claim one, so the tools work against any daemon.
- B. The tools ship in the MCP surface but are only usable against a server that advertises the capability, and the daemon itself does not model reservations.
- C. The tools live in a hosted-control-plane layer and not in this repository's MCP server.
The design should pick one and say why, including what it means for the open-core boundary and for self-hosted users, who have no quota to reserve against.
Requirements the design must meet (repository conventions)
- Proto first: any new RPC is defined in
.protowithgoogle.api.httpannotations, and REST, the client, and OpenAPI regenerate from it. States or kinds are enums, not strings. - CLI first: a
containariumsubcommand exists before the MCP tool, and the tool is a thin wrapper over the same Go function. - Scoped like the existing route tools (
routes:readandroutes:write), with the scope choice stated. - A downstream control plane that serves OSS-shaped paths will need to mirror any new RPC from this proto; note the contract it must keep.
The condition attached to the original recommendation
The original recommendation was to add these two only "if a real agent workflow needs a bare reservation as a distinct step from claim+bind". The design must name that workflow concretely, so the tools are justified by a use case and not only by the decision to add them.
Acceptance criteria
- A design doc under
docs/architecture/answers the ownership question above, names the motivating workflow, and lists the RPC(s), CLI verb(s), and tool schemas. - Implementation issues are filed from that design, each with its own acceptance criteria.
- Nothing is implemented from this issue.
Refs #1971.
- Dominant language
- Go
- Stars
- 296
- Forks
- 38
- Avg merge
- 7h 16m
- Merged PRs (30d)
- 689
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from FootprintAI/Containarium
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
FootprintAI/Containarium#2491 ·
Maintainers usually reply within 1 day
-
Gate wait test: replace the fixed sleep with a released hold; align refusal wording and field namesOpenchore model:sonnet phase-2-optimize runtime:claude size:S
Difficulty 3/5 1-2 days Newbie friendliness 70/100
FootprintAI/Containarium#3557 ·
Maintainers usually reply within 1 day
-
Skill-box post_start: the first deploy does not hold the per-box lock, so a concurrent run re-runs post_start in parallelPossibly taken @hsinatfootprintai claimed this today. Openbug model:opus needs-verification phase-1-flow runtime:claude size:M
FootprintAI/Containarium#3555 · 3 comments · 1 assignee ·
Maintainers usually reply within 1 day
-
Difficulty 4/5 3-5 days Newbie friendliness 55/100
FootprintAI/Containarium#3551 ·
Maintainers usually reply within 1 day
-
bug security
Difficulty 5/5 Over a week Newbie friendliness 25/100
FootprintAI/Containarium#3549 ·
Maintainers usually reply within 1 day
All issues in FootprintAI/Containarium
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
kubeflow/semantic-operator#52 ·
Maintainers usually reply within 10 days
-
enhancement help wanted
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
PramodBasavarajMenasi/siftwise#52 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
dragonflydb/dragonfly-operator#619 ·
Maintainers usually reply within 2 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 2 days
-
lazygit is not RustOpen
Difficulty 1/5 Under an hour Newbie friendliness 78/100