An MCP server for searching and managing financial documents using GemFire vector store with PDF ingestion and semantic search capabilities
The GemFire MCP server demonstrates basic tool structure with Spring AI @Tool annotations, but lacks critical quality elements across naming, descriptions, parameter documentation, and error handling. While tool names follow verb_noun patterns (search_financial_docs, add_financial_doc, list_available_financial_docs), descriptions are minimal (10-70 chars), parameters lack type definitions in the visible schema, and output structure is not formally documented. Error handling exists but provides minimal guidance to LLMs. The server uses Spring AI framework which auto-wires tools, but the JSON schema representation for LLM consumption is not visible in the provided source, suggesting reliance on framework-generated schemas that may not meet production standards. No pagination, no idempotency hints, no structured output documentation.
Add a financial PDF document to the GemFire vector store.
Show a list of financial documents available.
Search embedded financial documents using vector similarity in GemFire.
Parameter descriptions incomplete or missing. 'query' in search_financial_docs has a minimal description (9 chars: 'The search query to find similar documents'); 'filename' in add_financial_doc has only 37 chars. LLMs cannot reliably infer constraints, format expectations, or valid value ranges from minimal descriptions.
Output schemas not documented. search_financial_docs returns raw text concatenation of document chunks; add_financial_doc returns string messages; list_available_financial_docs returns List<String>. No structured schema definition visible. LLMs cannot plan downstream operations or extract typed fields reliably.
Input schema incomplete or not visible. The source code shows @Tool annotations with parameter names and descriptions, but no explicit JSON Schema objects with 'type', 'required', 'properties' fields are visible. Schema generation is delegated to Spring AI framework, likely producing minimal schemas without constraints (enums, patterns, min/max).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 44 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 49 | - | v1 |
Error messages lack recovery guidance. add_financial_doc returns generic error strings ('Error: Filename is null or empty', 'File not found', 'File too large') but does not guide the LLM toward recovery actions (e.g., 'Try listing available docs first with list_available_financial_docs'). No error categorization (retryable vs. user-fixable vs. fatal).
search_financial_docs lacks pagination and result limits. Hardcoded topK=3 is reasonable, but description does not state this limit, and no offset/limit parameters are exposed. If a user searches with a very broad query, only 3 results are returned with no way to request more, design violates pattern:paginated-result.
add_financial_doc should support idempotency hints and dry-run/confirmation. Tool modifies state (writes to vector store and metadata region) with no idempotent guarantees. No confirmation step for a write operation. If an LLM retries due to a network glitch, the same document may be ingested twice.
Descriptions do not state WHEN to use each tool or dependencies between tools. list_available_financial_docs should hint: 'Call this first to discover available documents before searching.' search_financial_docs should hint: 'Use list_available_financial_docs first to see what documents are indexed.' add_financial_doc should state: 'Document must be a valid PDF in docs.path directory (configurable); call list_available_financial_docs after ingestion to verify.'