A lightweight library that converts MCP tools into Python tools (function-like objects).
mcputil is a utility library for converting MCP tools into Python callables, not a production MCP server. The 4 sample tools show mixed quality: two have reasonable schemas and descriptions (add, long_running_task), but two examples (get_document, udpate_record) appear to be auto-generated or example stubs with minimal context. The 'udpate_record' tool has a typo in the name (should be 'update_record'). Descriptions are brief but present. Input schemas are visible and properly typed for all tools. However, the lack of parameter-level descriptions in schemas, missing output schemas, and no error recovery guidance are significant gaps. This is a library for tool definition, not a fully-fledged MCP server with production-grade tool definitions.
Add two numbers
Retrieves a document from Google Drive
Execute a task with progress updates.
Updates a record in Salesforce
Tool name contains typo: 'udpate_record' should be 'update_record'. Typos in tool names cause LLMs to fail to invoke the tool or select the wrong one.
No parameter-level descriptions in input schemas. Properties like 'a', 'b', 'task_name', 'steps', 'document_id', 'fields', 'object_type', 'record_id', 'data' lack descriptions. LLMs cannot infer parameter meaning from names alone; every parameter needs a description explaining what it controls.
No output schemas documented for any tool. LLMs need to know what fields to expect in responses so they can plan downstream tool calls and extract relevant data.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 53 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
No error recovery guidance in tool descriptions. Tools do not state what happens on failure or how the LLM should respond (retry, ask user, check prerequisites).
Tool descriptions are too generic and lack context for selection. 'Retrieves a document from Google Drive' and 'Updates a record in Salesforce' do not explain WHEN to use them, what makes them different from similar tools, or what state they modify.
Parameter 'data' in udpate_record is typed as 'object' with no schema or constraints. LLMs cannot determine what fields are valid or required. Should define a schema or enum for valid field names.
Tool 'get_document' has a 'fields' parameter with default '*' and no enum or constraint. The description 'Specific fields to return' does not explain what fields are available or what '*' means.
long_running_task has a 'steps' parameter with a default of 5, but no min/max bounds documented. Unbounded numeric parameters allow LLMs to pass absurd values (e.g. steps=1000000) that could cause timeouts or resource exhaustion.