Collection of MCP server implementations with Scalekit OAuth authentication, including Express.js and FastAPI/FastMCP variants
This is a collection of template/example MCP servers demonstrating auth patterns, not a production-grade server. Tool definitions are minimal: 11 tools across multiple files with inconsistent quality. Most descriptions are under 50 chars (well below the 194-char baseline). Parameters lack detailed constraints. No output schemas documented. Error handling is absent or minimal. The 'echo' and 'hello' tools are trivial examples. Scope-gated tools (todo:read, todo:write) show intent but lack enforcement visibility in the code. No evidence of pagination, structured output, or recovery guidance.
Create a new todo. Requires: todo:write scope.
Delete a greeting by ID
Delete a todo. Requires: todo:write scope.
Echo back the input
Get a specific greeting by ID
Greet someone by name
Say hello. Requires: example:read scope.
No output schemas documented. Tools return generic dicts with no field documentation. LLMs cannot plan downstream calls or extract structured data.
Descriptions are too short (avg ~40 chars vs 194-char baseline). 'Say hello', 'List all todos', 'Greet someone' lack context for LLM selection. No WHEN/WHY guidance.
Scope enforcement is documented in descriptions ('Requires: todo:read') but implementation is incomplete. Tool-template.py shows TODO comments for scope checks. No evidence of actual enforcement in deployed code.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Say hello.
List all greetings
List all todos. Requires: todo:read scope.
Update an existing todo. Requires: todo:write scope.
No pagination support. list_todos and list_greetings have no limit/offset/page parameters. Large result sets will blow context windows.
Error handling is absent. No recovery guidance, no actionable error messages, no categorization of retryable vs fatal errors. Tool-template.py shows generic error returns.