Production-grade FastAPI application with LangChain integration, MCP server capabilities, and legal document processing
This server has 9 tools with mixed quality. Three domain tools (hybrid_retrieve_precedents, detect_graph_conflicts, deep_research) have substantive descriptions and reasonable parameter schemas, but lack output schema documentation. Six infrastructure/health tools (health_check, readiness_check, get_server_metadata, search, fetch, list_upstream_servers) are minimal, mostly READ_ONLY utilities with sparse parameter descriptions. No tool has documented return types or examples. Parameter constraints are missing (e.g., num_results defaults to 5 but no max is stated). Several parameters lack descriptions entirely (e.g., 'thread_id' and 'step_id' appear in multiple tools but are not well explained). Error handling guidance is absent. The server follows basic naming conventions (verb_noun pattern) and includes tool annotations (toolAnnotations=true), but falls short of production-grade definition quality.
Run Tavily-backed deep web research and return a source-grounded report. Use for current external facts, market/legal background, and multi-source synthesis.
Detect contradicting obligation patterns in the legal knowledge graph. Finds: - Circular obligations: Party A owes Party B who owes Party A - Override chains: Clause C1 overrides C2 which overrides C1 These are structural contradictions that pure text analysis misses. Use this during risk analysis when relationships are complex.
Fetch a single capability or upstream-server record by identifier.
Return MCP server metadata, transport configuration, and capability counts.
Return a lightweight MCP connectivity health payload.
Retrieve legal precedents using hybrid vector + knowledge graph search. Combines: 1. pgvector semantic clause search (user's historical clauses) 2. Graphiti knowledge graph search (cross-document entity patterns) 3. Neo4j subgraph expansion from seed entities (depth=3 hop traversal) Returns structured precedents with similarity scores and obligation chains. Scope: PRECEDENT_SCOPE — all entity types, all sources, all time.
No output/return schemas documented for any tool. Tools return data but LLMs cannot know what fields to expect or how to chain calls.
Parameters 'thread_id' and 'step_id' appear in multiple tools with only generic descriptions ('For idempotency audit', 'Plan step ID'). No guidance on format, scope, or how to obtain values.
No numeric bounds on parameters accepting integers (num_results, max_concurrent_research_units, max_researcher_iterations, limit, offset). LLMs can pass absurd values (limit=999999, max_concurrent=100).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 63 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 47 | - | v1 |
List approved upstream MCP servers and their health state.
Return dependency readiness for the mounted MCP runtime.
Search the curated MCP capability catalog and configured upstream servers.
Infrastructure tools (health_check, readiness_check, get_server_metadata) have vague descriptions under 50 characters. 'Return a lightweight MCP connectivity health payload' and 'Return dependency readiness' don't explain WHEN or WHY to call them.
Error handling is absent. No tool guidance on what to do if a search fails, if graph traversal times out, or if a fetch returns nothing. LLMs have no recovery path.
The 'search' and 'fetch' tools operate on an undefined 'capability catalog and configured upstream servers' with no documented structure. What is a 'capability'? What format is an 'id'? This forces LLMs to guess.