Beholder MCP demonstrates solid tool design with consistent naming patterns (verb_noun), comprehensive parameter schemas with proper constraints (min/max, enums), and structured output models. All 11 tools have descriptions and input schemas. However, descriptions are often terse (many under 100 chars), lack dependency hints, and error handling guidance is minimal. Parameter descriptions are present but generic. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all tools being read-only. Output schemas are defined via Pydantic models but not documented in tool descriptions.
Find companies competing in the same PSC code categories as the given contractor. Useful for mapping the competitive landscape around a specific contractor.
Get a contract record by PIID or Beholder UUID. Returns full contract details including financials, period of performance, and risk indicators.
Get a contractor record by UEI or name. Returns a ContractorProfile with top agencies, PSC codes, and risk indicators.
Full profile of a contractor: registration details, recent contract history, top agencies, PSC codes, vehicle summaries, and risk indicators — in a single call.
Get a comprehensive portfolio analysis deck for a contractor or entity. Includes metrics, financial rollups, top awards, risk indicators, and competitive landscape.
Get contracts related to a given contract (parent IDV, delivery orders, follow-ons, etc.).
Tool descriptions lack dependency hints and recovery guidance. E.g., 'resolve_contractor' does not explain when to call it vs 'search_contractors', or what to do if resolution fails.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all 11 tools being read-only. Agents cannot infer safety properties without explicit hints.
Error handling is minimal. Tools raise ValueError with basic messages (e.g., 'No contractor found for X') but do not guide recovery (e.g., 'Try search_contractors() with a partial name').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Resolve a company name or UEI to its Beholder contractor record and UUID. Returns the single best match, or raises an error if none found.
Search for contractors (vendors/organizations) in the Beholder database.
Search for contracts in the Beholder database by various filters.
Search for government contracting opportunities (solicitations, awards, etc.) in the Beholder database.
Search for subawards (subcontracts) in the Beholder database.
Output schemas are defined via Pydantic models (ContractorProfile, ContractListResponse, etc.) but not documented in tool descriptions. LLMs cannot infer response structure without explicit schema documentation.
Parameter descriptions are generic and lack format/constraint details. E.g., 'sort_by' lists options in description but does not use enum constraint; 'page_size' lacks explanation of why max is 200.