← The board

F13 An assistant's way in

Area
F — Extensibility
Audience
operator
Kind
feature
Status
accepted
Maturity
built
Labels
extensibility, household, web
Relates to
C10F12G2D11

The feature in the specification · Read at

Requirements

  1. F13-R1acceptedMUST

    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.

    locked by
    0.18.0 met
    recorded done
    integration-mcpsrc/lemonfiber_mcp/settings.pysrc/lemonfiber_mcp/stack.pytests/test_architecture.pytests/test_settings.py
    cited by
    integration-mcp@39fee8d758
  2. F13-R2acceptedMUST

    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.

    locked by
    0.18.0 met
    recorded done
    integration-mcpscripts/generate_tools.pysrc/lemonfiber_mcp/_generated/tools.pysrc/lemonfiber_mcp/descriptions.tomltests/test_catalogue.pytests/test_generate_tools.py
    cited by
    integration-mcp@5ab3d01f86integration-mcp@39fee8d758
  3. F13-R3acceptedMUST

    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
  4. F13-R4acceptedMUST

    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.

    locked by
    0.18.0 met
    recorded done
    integration-mcpscripts/generate_tools.pysrc/lemonfiber_mcp/_generated/tools.pysrc/lemonfiber_mcp/connection.pysrc/lemonfiber_mcp/outcome.pyREADME.mdtests/test_generate_tools.pytests/test_outcome.pytests/test_server.py
    cited by
    integration-mcp@8c765e26be
  5. F13-R5acceptedMUST

    Every write tool MUST carry the protocol's annotations stating whether it is destructive and whether it is idempotent.

    locked by
    0.18.0 met
    recorded done
    integration-mcpscripts/generate_tools.pysrc/lemonfiber_mcp/catalogue.pytests/test_catalogue.py::test_every_write_tool_states_whether_it_is_destructive_and_idempotent
    cited by
    integration-mcp@39fee8d758
  6. F13-R6acceptedMUST

    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.

    locked by
    0.18.0 met
    recorded done
    integration-mcpsrc/lemonfiber_mcp/cli.pyDockerfile.github/workflows/release.yml.github/workflows/ci.ymltests/test_cli.pytests/test_web.py
    cited by
    integration-mcp@018a63d5a8
  7. F13-R7acceptedMUST

    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.

    locked by
    0.18.0 met
    recorded done
    integration-mcpsrc/lemonfiber_mcp/settings.pysrc/lemonfiber_mcp/cli.pytests/test_settings.pytests/test_cli.py
    cited by
    integration-mcp@018a63d5a8
  8. F13-R8acceptedMUST

    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.

    locked by
    0.18.0 met
    recorded done
    integration-mcpsrc/lemonfiber_mcp/web.pysrc/lemonfiber_mcp/cli.pytests/test_web.pytests/test_cli.py::test_the_http_mode_refuses_a_key_of_its_own
    cited by
    integration-mcp@018a63d5a8
  9. F13-R9acceptedMUST

    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
  10. F13-R10acceptedMUST

    It MUST NOT log, return or include in an error any key, pin or credential.

    locked by
    0.18.0 met
    recorded done
    integration-mcpsrc/lemonfiber_mcp/withheld.pytests/test_withheld.pytests/test_server.py::test_no_key_or_pin_leaves_in_any_answer_or_refusaltests/test_web.py::test_no_key_reaches_the_log
    cited by
    integration-mcp@018a63d5a8
  11. F13-R11acceptedMUST

    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
  12. F13-R12acceptedMUST

    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
  13. F13-R13acceptedMUST

    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.

    locked by
    0.18.0 met
    recorded done
    integration-mcpsrc/lemonfiber_mcp/certificates/settings.pysrc/lemonfiber_mcp/certificates/manager.pyREADME.mdtests/test_certificate_manager.py
    cited by
    integration-mcp@018a63d5a8
  14. F13-R14acceptedMUST

    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.

    locked by
    0.18.0 met
    recorded done
    integration-mcpsrc/lemonfiber_mcp/outcome.pysrc/lemonfiber_mcp/serving.pytests/test_outcome.pytests/test_server.py
    cited by
    integration-mcp@39fee8d758
  15. F13-R15acceptedMUSTClaim it

    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.

    locked by
    0.19.0 open
    recorded done
    integration-mcpsrc/lemonfiber_mcp/cli.pysrc/lemonfiber_mcp/settings.pyREADME.mdtests/test_collect.py