by gogoymh
NVIDIA Auto Ontology's semantic layer and a personal knowledge base as an MCP server for Claude, ChatGPT and other MCP clients. No LLM API key needed.
# Add to your Claude Code skills
git clone https://github.com/gogoymh/auto-ontology-mcpGuides for using mcp servers skills like auto-ontology-mcp.
See how auto-ontology-mcp compares with popular alternatives.
auto-ontology-mcp is an open-source mcp servers skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by gogoymh. NVIDIA Auto Ontology's semantic layer and a personal knowledge base as an MCP server for Claude, ChatGPT and other MCP clients. No LLM API key needed. It has 66 GitHub stars.
auto-ontology-mcp's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/gogoymh/auto-ontology-mcp" and add it to your Claude Code skills directory (see the Installation section above).
auto-ontology-mcp is primarily written in Python. It is open-source under gogoymh on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other MCP Servers skills you can browse and compare side by side. Open the MCP Servers category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh auto-ontology-mcp against similar tools.
No comments yet. Be the first to share your thoughts!
Top skills in this category by stars
Available after the catalog security scan passes.
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
Auto Ontology MCP (auto-ontology-mcp) brings NVIDIA Auto Ontology's semantic layer to any MCP client, for two jobs:
[!TIP] Use it in place of an LLM Wiki. In Karpathy's LLM Wiki pattern the model compiles your sources into markdown pages that you read in Obsidian. Auto Ontology MCP runs the same loop (ingest, query, lint, with an index and a log) on an ontology instead of loose pages: facts go into typed tables you can sum, filter and compare with SQL, ideas become concept pages with typed links, every record, page and link keeps its source and the quote behind it, and
export_wikiwrites it all out as an Obsidian vault with aliases,[[links]]and the graph view. How the two map
Auto Ontology runs its own LLMs (NVIDIA NIM) behind a Next.js, FastAPI and Postgres stack. This project hands every language step (reading, extracting, naming, judging, writing SQL) to the model in your MCP client, so there is no model endpoint to host and no API key to configure. The server keeps the deterministic work: schema extraction, profiling, key inference, validation, storage and read-only execution, in local SQLite files.
Text-to-SQL fails quietly. The query runs, a number comes back, and nothing says it is wrong.
| ❌ A model reading a raw schema | ✅ The same model with auto-ontology-mcp |
|---|---|
Guesses which of billing_city_id and delivery_city_id "the customer's state" means |
Gets the join path from reviewed relationships, with the default role and the alternatives spelled out |
Joins customers.customer_id = orders.order_id because the integers happen to overlap |
validate_sql rejects the join and names the one the ontology knows |
Filters state_name = 'pennsylvania' and reports zero revenue |
Is told the stored value is 'Pennsylvania' before running the query |
Writes discount_pct > 20 against a column that holds 0 to 0.3 |
Is asked whether it meant 0.2 |
| Sums a product price after joining to order lines and inflates the total | Gets a fan-out warning for the one-to-many join |
| Answers "return on ad spend" with whatever revenue column it finds | Hears from check_answerable that nothing covers ad spend, and says so |
auto-ontology-mcp demo sets up three demos about one fictional store: a synthetic retail database (11 tables, 3,200 orders), three of the store's documents in the knowledge store (a meeting note, a tag guide and a quality digest, with their originals in the Obsidian vault), and questions that need both. Tool output below is abridged from real runs of the test fixtures (tests/test_demo.py); the model's replies are illustrative.
A question asked after the model modeled the tables and reviewed the joins. In that review it made customers.delivery_city_id the default city role, so states below are delivery states. A fresh scan makes billing_city_id the default instead: neither column name is the unqualified city_id, and Auto Ontology's fallback then picks the alphabetically first role. set_relationship(..., is_default=true) changes it, and get_query_context names the other role in its role notes either way.
You What was revenue for the sushi roll flash drive in Pennsylvania in June 2024?
Model → check_answerable(entities=["revenue", "sushi roll flash drive", "Pennsylvania"])
verdict: answerable
revenue covered Order Line › Revenue (order_lines.line_total)
sushi roll flash drive covered_by_value products.product_name = 'USB Food Flash Drive - Sushi Roll'
Pennsylvania covered_by_value states.state_name = 'Pennsylvania'
→ get_query_context(terms=["Order Line", "Product", "State", "Order"])
join path: order_lines → products
order_lines → orders → customers → cities → states
role note: customers.delivery_city_id = cities.city_id is the default;
other roles: customers.billing_city_id (billing)
→ validate_sql(first draft)
✗ Join customers.customer_id = orders.order_id is not how the ontology joins these
tables (orders.customer_id = customers.customer_id).
! No row has states.state_name = 'pennsylvania'. Close real values: 'Pennsylvania'.
→ run_sql(fixed query)
revenue 316.8, order_lines 4
draft Terms used: City, Customer, Order, Order Line, Product, State
Model Revenue was 316.80 from 4 order lines (delivery state Pennsylvania, June 2024).
The Terms behind this answer are still drafts, so treat the definition as unreviewed.
[SQL shown]
And a question the data cannot answer:
You What was return on ad spend for the sushi roll flash drive?
Model → check_answerable(...)
verdict: partially_answerable coverage: 0.33
not covered: "return on ad spend", "ad spend"
Model This database has sales but no advertising spend, so I can't compute ROAS.
I can give you revenue for that product instead.
The demo stores the three documents the way a model would after reading them: each full text as an original note in the vault, the passages worth finding again, the concepts and causal links they describe, and the action items they decide.
You [Merchandising tag guide] Remember this.
Model → save_passages(source={title: "Merchandising tag guide", kind: "wiki", original_text: "# Merchandising tag guide …"},
passages=[{heading: "bestseller", text: "A product the buyers want to feature …", terms: ["Bestseller Tag"]}, …])
original kept in the vault: originals/Merchandising tag guide.md
→ save_concept("Bestseller Tag", relations=[is_a Merchandising Tag], source=2, locator="bestseller")
You What does the bestseller tag mean?
Model → search_text("bestseller")
term Bestseller Tag [Bestseller] Tag
passage Merchandising tag guide › bestseller "A product the buyers want to feature on the home page.
It is a placement decision and does not mean the
product sells the most units."
link: [[originals/Merchandising tag guide#bestseller]]
Model Buyers pick it for home-page placement; it is not a sales ranking
([[originals/Merchandising tag guide#bestseller]]).
You What led to the Midwest sales decline?
Model → run_sql(datasource="knowledge", sql="WITH RECURSIVE chain AS (… FROM term_relations r JOIN chain
ON r.to_term_id = chain.id WHERE r.relation IN ('causes', 'part_of')) …")
Fewer Repeat Orders part_of 1
Delivery Delay causes 2
September Stockout causes 2
Fulfilment Cutover causes 3
You Which product problems sent products back?
Model → run_sql(datasource="knowledge", sql="SELECT t.name, p.heading, snippet(passages_fts, …)
FROM passages_fts JOIN passages p … JOIN passage_terms … JOIN terms t … JOIN term_relations r …
WHERE passages_fts MATCH '"returns"* OR "back"' AND r.relation = 'instance_of'
AND r.to_term = 'Product Quality Issue' ORDER BY bm25(passages_fts)")
Wobbling Chair Base Office Chair …Several chairs came [back] before support …
Ear Cushion Cracking Noise Cancelling Headphones …the product customers sent [back] most often.
The last query is a full-text search, a