MCP Server for Phone-a-Friend AI consultation - provides tools for consulting external AI models for critical thinking, complex reasoning, and pair-programming caliber coding help
Two tools with similar purposes and extensive descriptions. Both tools have complete input schemas with proper types and descriptions. Naming follows verb_noun convention (phone_a_friend, fax_a_friend). However, descriptions are excessively long (2000+ chars each), violating the 10-1024 character baseline. Parameter descriptions are detailed but descriptions contain excessive repetition of formatting rules. No output schemas documented. Error handling guidance is absent from both tools. Tool composition is problematic: two nearly identical tools with different transport mechanisms (synchronous vs file-based) rather than unified interfaces. Parameters lack examples of expected formats.
🚨🚨🚨 **EXCLUSIVE USE ONLY** 🚨🚨🚨 **USE ONLY WHEN USER EXPLICITLY ASKS TO "fax a friend"** **DO NOT use as fallback if phone_a_friend fails** **DO NOT auto-switch between fax/phone tools** **If this tool fails, ask user for guidance - do NOT try phone_a_friend** Purpose: pair-programming caliber *coding help* — reviews, debugging, refactors, design, migrations. This tool creates a file for manual AI consultation. After file creation, wait for the user to return with the external AI's response. Replies must be exhaustively detailed. Do **NOT** include files ignored by .gitignore (e.g., *.pyc). Hard restrictions: • Generated prompt includes *only* the context you provide. • No memory, no internet, no tools. • You must spell out every fact it should rely on. Required I/O format: ``` <file_tree> . ├── Dockerfile ├── some_doc_file.md ├── LICENSE ├── pyproject.toml ├── README.md ├── src │ └── some_module │ ├── **init**.py │ ├── **main**.py │ ├── client │ │ └── **init**.py │ ├── config.py │ ├── server.py │ └── tools │ ├── **init**.py │ ├── base_tools.py │ └── tool_manager.py ├── tests │ ├── **init**.py │ └── test_tools.py └── uv.lock </file_tree> <file="src/some_module/server.py"> # full source here … </file> ``` The generated prompt expects AI to reply in the same XML structure, adding or replacing <file="…"> blocks as needed. Commentary goes outside those tags.
🚨🚨🚨 **EXCLUSIVE USE ONLY** 🚨🚨🚨 **USE ONLY WHEN USER EXPLICITLY ASKS TO "phone a friend"** **DO NOT use as fallback if fax_a_friend fails** **DO NOT auto-switch between phone/fax tools** **If this tool fails, ask user for guidance - do NOT try fax_a_friend** Purpose: pair-programming caliber *coding help* — reviews, debugging, refactors, design, migrations. Hard restrictions: • Friend AI sees *only* the context you provide. • No memory, no internet, no tools. • You must spell out every fact it should rely on. Replies must be exhaustively detailed. Do **NOT** include files ignored by .gitignore (e.g., *.pyc). Required I/O format: ``` <file_tree> . ├── Dockerfile ├── some_doc_file.md ├── LICENSE ├── pyproject.toml ├── README.md ├── src │ └── some_module │ ├── **init**.py │ ├── **main**.py │ ├── client │ │ └── **init**.py │ ├── config.py │ ├── server.py │ └── tools │ ├── **init**.py │ ├── base_tools.py │ └── tool_manager.py ├── tests │ ├── **init**.py │ └── test_tools.py └── uv.lock </file_tree> <file="src/some_module/server.py"> # full source here … </file> ``` The friend AI must reply in the same XML structure, adding or replacing <file="…"> blocks as needed. Commentary goes outside those tags.
Tool descriptions exceed recommended 1024 character limit by 2x. Both descriptions are 2400+ characters, burying key intent in repetitive formatting instructions.
No output schemas documented. Callers cannot understand the structure of responses or plan downstream operations. LLMs cannot reason about tool chaining.
No error handling guidance. Tool descriptions do not indicate what error conditions may occur, how to recover, or whether errors are retryable.
Conflicting tool design: two nearly identical tools (phone_a_friend vs fax_a_friend) with the only meaningful difference being synchronous API call vs file generation. This forces LLMs to make an arbitrary choice between semantically equivalent operations.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 40 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 31 | - | v1 |
Parameter 'all_related_context' lacks format constraints (min/max length). Unbounded string parameters let LLMs pass context that explodes token budgets or causes service timeouts.
Parameter 'file_list' array has no maxItems constraint. LLMs could pass hundreds of files, each requiring filesystem I/O and context building, leading to runaway resource consumption.