F13 An assistant's way in
- Area
- F — Extensibility
- Audience
- operator
- Kind
- feature
- Status
- accepted
- Maturity
- built
- Labels
- extensibility, household, web
The feature in the specification · Read at
Requirements
The server MUST reach a stack only through sdk-python and only with an integration key, and MUST NOT ask for, accept or store the operator password.
Its tools and resources MUST be generated from the core's published contract: a tool and a resource for every served read and a tool for every action a key may call. A test MUST fail when a read or a key-callable action has no tool, or a tool has no description.
It MUST offer only the tools its key's scope admits. A member key MUST yield no technical tool, and its tools' descriptions MUST be in the household's words.
- locked by
- 0.18.0 met
- recorded done
- integration-mcpsrc/lemonfiber_mcp/catalogue.pysrc/lemonfiber_mcp/connection.pysrc/lemonfiber_mcp/descriptions.tomlREADME.mdtests/test_catalogue.pytests/test_server.py::test_a_member_key_is_offered_no_technical_tool_and_reads_the_households_words
- cited by
- integration-mcp@5ab3d01f86integration-mcp@8c765e26be
An action that can be rehearsed MUST be offered as a rehearsal tool, which writes nothing and returns an offer, and an action tool that takes only that offer as its yes.
Every write tool MUST carry the protocol's annotations stating whether it is destructive and whether it is idempotent.
The server MUST speak stdio, runnable from this organisation's repository without a package registry, and Streamable HTTP, from a multi-arch image its release builds.
In either mode it MUST be configured with the stack's address, a key and the certificate pin, and MUST refuse to start without a pin for a non-loopback address.
In HTTP mode it MUST serve only over TLS, MUST require a key on every request and use that request's key for the stack, and MUST NOT hold a credential of its own.
A refused key MUST be reported by every tool as refused, saying a new key is needed, and MUST NOT be retried.
- locked by
- 0.18.0 met
- recorded done
- integration-mcpsrc/lemonfiber_mcp/connection.pysrc/lemonfiber_mcp/outcome.pytests/test_server.py::test_a_refused_key_is_told_by_every_tool_and_never_sent_againtests/test_web.py::test_a_refused_key_is_refused_by_every_tool_and_not_sent_again
- cited by
- integration-mcp@018a63d5a8
It MUST NOT log, return or include in an error any key, pin or credential.
Its documentation MUST state that an assistant sends what it reads to its client's model provider, and that allowing members to mint keys lets a member's requests and viewing reach a provider of their choosing.
- locked by
- 0.18.0 met
- recorded done
- integration-mcpREADME.md
- cited by
- integration-mcp@39fee8d758
In HTTP mode it MUST come by its certificate as the certificates contract sets out, offering its four modes and serving pinned where none is chosen.
- locked by
- 0.18.0 met
- recorded done
- integration-mcpsrc/lemonfiber_mcp/certificates/settings.pysrc/lemonfiber_mcp/certificates/sources.pysrc/lemonfiber_mcp/certificates/manager.pyREADME.mdtests/test_certificate_settings.pytests/test_certificate_modes.pytests/test_certificate_acme.py
- cited by
- integration-mcp@e2de2ba46cintegration-mcp@018a63d5a8
Its start-up log and its documentation MUST say, for the mode it serves, who can check its certificate, and MUST say that an assistant whose provider makes the connection can reach it only with a publicly trusted certificate.
Every tool result MUST carry what the stack answered as data, delimited from the server's own words, and MUST NOT place text the stack answered with outside that delimitation.
Setup MUST accept a key link (C10-R18) in place of the address, key and pin: it MUST collect the key once over the TLS the link's fingerprint verifies (C10-R20), keep only what the reply carries, and name the reason when the claim is refused.