FACADE. The MCP surface.
FOUR tools, not eighty, and the arithmetic is the reason. The reference project publishes one MCP tool per GIMP command; eighty tool definitions with their descriptions and schemas is a large, permanent tax on the context of every client that mounts this addon, whether or not it ever touches GIMP. The commands are DATA here, so one dispatching tool carries all of them and the catalog is queried on demand instead of being recited up front.
gimp run any catalogued command gimp_exec arbitrary Python-Fu, the escape hatch gimp_catalog list, search and describe commands (the discovery path that replaces eighty descriptions) gimp_doctor why is this not working
Adding a GIMP command adds a row to commands_extra.edn and changes nothing here (OCP).
FACADE. The MCP surface.
FOUR tools, not eighty, and the arithmetic is the reason. The reference
project publishes one MCP tool per GIMP command; eighty tool definitions
with their descriptions and schemas is a large, permanent tax on the context
of every client that mounts this addon, whether or not it ever touches GIMP.
The commands are DATA here, so one dispatching tool carries all of them and
the catalog is queried on demand instead of being recited up front.
gimp run any catalogued command
gimp_exec arbitrary Python-Fu, the escape hatch
gimp_catalog list, search and describe commands (the discovery path that
replaces eighty descriptions)
gimp_doctor why is this not working
Adding a GIMP command adds a row to commands_extra.edn and changes nothing
here (OCP).(catalog-handler params)Discovery. Never touches GIMP: every answer comes from the loaded contract.
The projection itself lives in hive-gimp.contract/describe, reached here
through the catalog accessor. Keeping it out of this namespace is what lets
it be generatively tested; a wiring namespace is a poor place for a decision
about what clients may depend on.
Discovery. Never touches GIMP: every answer comes from the loaded contract. The projection itself lives in `hive-gimp.contract/describe`, reached here through the catalog accessor. Keeping it out of this namespace is what lets it be generatively tested; a wiring namespace is a poor place for a decision about what clients may depend on.
(normalize-args params)A JSON params object to the kebab-case keyword map the promote layer wants.
Accepts either spelling for every key. An MCP client that read the wire
contract sends image_index; one that read the catalog sends image-index.
Punishing either would be a puzzle, not a contract.
A JSON params object to the kebab-case keyword map the promote layer wants. Accepts either spelling for every key. An MCP client that read the wire contract sends `image_index`; one that read the catalog sends `image-index`. Punishing either would be a puzzle, not a contract.
(pixel-tool transport host-python)Host-side pixel work, and its composition with GIMP.
A separate tool from gimp because these are NOT GIMP commands: they run in
the host's Python, on files, using packages GIMP does not ship. Folding them
into the gimp command enum would tell a client they are available whenever
GIMP is, which is exactly wrong: they need the optional Python port and GIMP
commands do not.
Host-side pixel work, and its composition with GIMP. A separate tool from `gimp` because these are NOT GIMP commands: they run in the host's Python, on files, using packages GIMP does not ship. Folding them into the `gimp` command enum would tell a client they are available whenever GIMP is, which is exactly wrong: they need the optional Python port and GIMP commands do not.
(tools transport host-python)Every tool this addon publishes.
Five, carrying eighty GIMP commands plus the host-side pixel operations. The count is the point: one tool definition per GIMP command would be a large permanent tax on the context of every client that mounts this addon, whether or not it ever opens an image.
Every tool this addon publishes. Five, carrying eighty GIMP commands plus the host-side pixel operations. The count is the point: one tool definition per GIMP command would be a large permanent tax on the context of every client that mounts this addon, whether or not it ever opens an image.
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |