emmett-mcp exposes three decorator functions (tool, prompt, resource) as 'tools', but these are NOT actual agent tools in the MCP sense. The source code shows these are Python decorators used to register handlers with the MCP module, not executable tools that an LLM agent would call. The 'tool' decorator accepts optional name and description parameters but provides no mechanism to define input schemas, output schemas, or error handling for decorated functions. The prompt and resource decorators similarly lack proper tool definition structure. Critically, there is no visible schema generation, parameter validation, or documentation of what each decorated function actually does when invoked. The input parameters shown (name, description for tool/prompt; uri, name, description, mime_type for resource) describe the DECORATORS themselves, not the tools they register. This is a fundamental architectural mismatch: the MCP specification requires tools to have explicit input schemas, descriptions, and output structures, emmett-mcp provides a decorator API that does not enforce or expose these. Without access to the actual tool handler implementations (which would be user-defined functions decorated with @tool, @prompt, @resource), it is impossible to evaluate the schema quality of any actual registered tools. The three items listed are meta-tools for registration, not domain tools.
Decorator to register a prompt template with the MCP module
Decorator to register a resource (template or static) with the MCP module
Decorator to register a tool with the MCP module
No input schemas visible for any 'tool'. The tool decorator accepts name and description, but there is no JSON Schema definition for the inputs of the actual decorated functions.
Decorator functions are not agent-callable tools. The 'tool', 'prompt', and 'resource' items are Python decorators for registering handlers, not MCP tools that an LLM would invoke. True tools are the user-defined functions decorated with @tool/@prompt/@resource, whose implementations and schemas are not visible in the source provided. Scoring these decorators as tools is architecturally incorrect.
Descriptions are generic and minimal (under 50 chars for all three). 'Decorator to register a tool with the MCP module' and 'Decorator to register a prompt template with the MCP module' do not explain what calling these does, when to use them, or what the expected output is. These are longer than 20 chars but still trivial.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 34 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 26 | - | v1 |
No error handling guidance. There is no documentation of what happens if registration fails, what errors are possible, or how to recover. No actionable error messages are specified.
Parameter descriptions are terse. E.g., 'Optional custom name for the tool' does not explain constraints (length, format, valid characters), uniqueness requirements, or what happens if the name collides with an existing tool.
No documented output schema. When a tool is registered successfully, what is returned? Is it a registration ID, a confirmation object, or void? No return structure is specified.
The 'uri' parameter for 'resource' lacks format constraints. Is it a URL, a file path, a URI template per RFC 6570? The description says 'URI or URI template' but does not specify allowed patterns or how URIs are resolved. LLMs cannot infer valid URIs without explicit format guidance.