Ontology-based MCP server for database ad hoc analysis with semantic modeling, Text-to-SQL convenience, GraphRAG integration, and interactive charting across 8 database types
OrionBelt Analytics presents a sophisticated, well-engineered MCP server for database ontology and semantic analysis. Tool naming is consistently verb-led (connect_, list_, discover_, generate_, execute_, etc.), descriptions are detailed and contextual, and input schemas are comprehensive with enums and validation. However, output schemas are not explicitly documented in source code, and some error-handling patterns lack recovery guidance. The server demonstrates strong composition design with clear dependencies and prerequisites stated in descriptions. Security practices are sound (no credentials exposed in parameters). At 26 tools, the complexity is managed well through thoughtful naming conventions and parameter constraints. Overall Definition Quality is good but not exceptional due to missing output schema documentation and limited explicit error recovery patterns.
Add custom metadata triples to the RDF store. Allows enrichment of the ontology with domain-specific knowledge.
Apply suggested semantic names to the ontology, updating the namespace mappings and entity labels.
Delete workspace files and start fresh. Clears all cached data, ontologies, charts, and RDF stores for the current connection.
Connect to a database using credentials from environment variables. If a previous workspace exists for this connection, it is automatically restored (schema cache, ontology, GraphRAG, RDF store). The response indicates what was restored and which tools are ready to use.
Analyze database schema and return table metadata with relationships. REQUIRES: connect_database must be called first and must complete before calling this tool.
Download generated artifacts (ontology, R2RML mappings, etc.) as Turtle files.
Output schemas not explicitly documented. Tool descriptions state what is returned (e.g., 'returns query result data', 'returns ontology RDF') but do not include formal JSON Schema definitions of response structures. This forces LLMs to infer response shape from context alone, increasing likelihood of malformed result handling.
Error handling lacks explicit recovery guidance. execute_sql_query mentions 'validation', 'injection prevention', and 'fan-trap detection' but does not specify what error codes or messages LLMs should expect on failure, or how to recover. Similarly, cleanup_workspace requires confirmation but does not document partial-failure scenarios.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 77 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 44 | - | v1 |
Execute SQL with built-in validation and fan-trap checks. All queries are read-only (enforced). Syntax validation, injection prevention, and OBQC ontology validation are automatic. Fan-trap detection warns of data multiplication in multi-table queries.
Generate Plotly charts with MCP-UI rendering. Supports line, bar, scatter, pie, box, heatmap, and histogram charts. Returns interactive HTML for client rendering.
Generate an RDF ontology from database schema. AUTO-ANALYZES schema if needed!
Retrieve a stored semantic model by name.
Get detailed metadata for a single table. Only use when you need to inspect a specific table that the user asked about — do NOT call this for every table. discover_schema() and the ontology already contain full schema structure including columns, keys, and relationships. REQUIRES: connect_database must be called first.
Discover join paths between tables via graph traversal. Uses the GraphRAG entity/relationship index to find the shortest or most relevant paths.
Optimized context for SQL generation. Returns relevant schema information and join paths for a given natural language query intent, leveraging the GraphRAG index.
Semantic search + overview over the GraphRAG index. Auto-initialized by discover_schema. Allows natural language queries over schema structure and relationships.
Get a list of available schemas from the connected database. REQUIRES: connect_database must be called first.
List all stored semantic models in the workspace.
Load a custom .ttl ontology file from the workspace, replacing or merging with the auto-generated one.
Find numeric measures reachable from a class in the ontology. Identifies all numeric columns and aggregatable properties accessible from the given class.
Plan a multi-hop query over the ontology. Given a natural language intent, generates a query plan with JOIN sequences and aggregations.
Execute SPARQL queries (SELECT, ASK, CONSTRUCT) against the Oxigraph-backed RDF store. Returns structured results.
Traverse object-property edges from a class in the ontology. Returns all classes and properties reachable via direct or multi-hop relationships.
Reset cached schema and/or ontology data to force re-analysis.
Preview table data with security controls. Returns a limited number of rows with optional filtering.
Save a semantic model (entity mappings, relationship definitions, domain constraints) to the workspace for reuse.
Persist ontology in Oxigraph RDF store. Makes the ontology queryable via SPARQL endpoints.
Detect abbreviated, cryptic, or non-semantic table and column names in the ontology and suggest more descriptive names based on word frequency analysis and context clues.
Tool parameter optional/required status not consistently explicit. Several tools like graphrag_query_context accept schema_name and graph_uri as optional, but descriptions do not clarify fallback behavior when omitted (e.g., 'auto-detected' or 'uses default'). This can lead to ambiguous LLM invocations.
No explicit idempotence guarantees documented. Tools like add_rdf_knowledge and save_semantic_model modify state but do not clarify whether calling twice with identical inputs produces duplicate entries or overwrites gracefully. Agents may retry on transient failures and inadvertently create duplicates.
Pagination missing from discovery and query tools. list_schemas, discover_schema, and query_sparql do not document limit or offset parameters or total counts. For large databases, these tools may return unbounded results, exhausting context windows or timing out.