fibo-mcp
Provides an MCP interface for OpenAI models (e.g., GPT) to access the FIBO ontology, allowing structured financial knowledge retrieval through remote HTTP connection.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@fibo-mcpwhat is a derivative?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
fibo-mcp
Give your financial agent access to the Financial Industry Business Ontology (FIBO).
Paste into Claude Code:
Install fibo-mcp from https://github.com/NeuroFusionAI/fibo-mcpInstallation
If already in fibo-mcp directory, skip clone and cd. Run all commands from the fibo-mcp directory:
git clone https://github.com/NeuroFusionAI/fibo-mcp.git && cd fibo-mcp
uv sync
claude mcp add --scope user fibo-mcp -- uv run --directory "$(pwd)" main.py
# Restart Claude Code to load the MCPWith OWL-RL Materialization (Recommended for symbolic reasoning)
Materialization applies the OWL-RL profile and caches the inferred graph. Triple counts depend on the pinned FIBO revision. OWL-RL is a scalable subset of OWL, not unrestricted or complete OWL reasoning.
# Step 1: Build cache first (Ctrl+C after "Ready to serve")
uv run main.py --materialize
# Step 2: Add MCP (instant startup from cache)
claude mcp add --scope user fibo-mcp -- uv run --directory "$(pwd)" main.py --materializeDiagramming Skill
The repo includes a diagramming skill (.claude/skills/diagramming_expert/) for ASCII visualizations.
When installing via Claude Code, ask user:
Diagramming skill scope:
Project scope only (default - already in .claude/skills/)
User scope (all projects) - copy to ~/.claude/skills/
# User scope skill (optional)
cp -r .claude/skills/diagramming_expert ~/.claude/skills/Other MCP Clients (Cursor, Claude Desktop, etc.)
Add to your MCP config file:
{
"mcpServers": {
"fibo-mcp": {
"command": "uv",
"args": ["run", "--directory", "/path/to/fibo-mcp", "main.py"]
}
}
}With materialization:
{
"mcpServers": {
"fibo-mcp": {
"command": "uv",
"args": ["run", "--directory", "/path/to/fibo-mcp", "main.py", "--materialize"]
}
}
}Build cache first:
uv run main.py --materialize(Ctrl+C after "Ready to serve")
Uninstall
# Claude Code
claude mcp remove fibo-mcp
# Remove user-scope skill (if installed)
rm -rf ~/.claude/skills/diagramming-expertRelated MCP server: oak-mcp
Examples
"What is money?"
Money is a medium of exchange, a store of value, and a unit of account that facilitates economic transactions.
Forms of Money:
Commodity money - Physical items with intrinsic value (gold, silver)
Fiat money - Government-issued currency not backed by commodity (USD, EUR)
Digital/Electronic money - Bank deposits, digital payments
Cryptocurrencies - Decentralized digital assets like Bitcoin
Money's value ultimately rests on collective trust and acceptance.
Claude automatically queries FIBO...
According to FIBO:
Currency: "medium of exchange value, defined by reference to the geographical location of the monetary authorities responsible for it"
FIBO distinguishes:
Currency - the medium of exchange itself
Monetary Amount - a quantity denominated in a currency
Currency Identifier - ISO 4217 codes (USD, EUR, etc.)
"What is a country?"
A country is a distinct territorial body or political entity with its own government, defined borders, and sovereignty.
Key characteristics:
Defined territory
Permanent population
Government
Sovereignty
Recognition by other countries
There are approximately 195 recognized countries today.
Claude automatically queries FIBO...
Sovereign State: "non-physical juridical entity that is represented by one centralized government that has sovereignty over a geographic area"
Key characteristics from FIBO:
Represented by one centralized government
Has a permanent population
Has defined territory
Has capacity to enter into relations with other sovereign states
Related: Federated Sovereignty, Regional Sovereignty
"What is corporate?"
A corporation is a legal entity separate from its owners:
Limited liability - Owners not personally responsible for debts
Perpetual existence - Continues regardless of ownership changes
Legal personhood - Can own property, enter contracts, sue and be sued
Transferable ownership - Shares can be bought and sold
Claude automatically queries FIBO...
Corporation: "formal organization that is a legal entity (artificial person) distinct from its owners, created under the jurisdiction of the laws of a state or nation"
Related subclasses include Stock Corporation, For Profit Corporation, and Not-for-Profit Corporation.
Formation: Articles of Incorporation, Corporate Bylaws
Why FIBO?
Finance has a semantics problem—the same "trade," "counterparty," or "position" can mean different things across desks, systems, vendors, and jurisdictions. FIBO provides a formal, machine-readable ontology (OWL/RDF) so data from contracts, market feeds, and internal systems can be integrated and queried with shared meaning.
Contributors include Citigroup, Deutsche Bank, Goldman Sachs, State Street, Wells Fargo, CFTC, US Treasury OFR, and others. Standardized by EDM Council and OMG.
HTTP MCP (local by default)
The HTTP listener binds to 127.0.0.1 by default. Do not expose it directly to
the internet: the server accepts read-only SPARQL and caps returned rows, but it
does not provide application authentication or rate limiting. Put an
authenticated, rate-limited gateway in front of it before any remote use.
# Start HTTP server
uv run main.py --http --port 8000
Technical Details
Data | 299 RDF/OWL source files at the pinned revision; loaded triple count is logged at startup |
Base graph | 133,498 triples; 3,346 |
Cache |
|
Source revision |
|
Refresh cache |
|
Server Flags
Flag | Description |
| Enable OWL-RL inference (adds startup time; the materialized graph is cached) |
| Number of BM25 search results (default: 10) |
| Re-download the configured FIBO revision |
| Run as HTTP server instead of stdio |
| HTTP server port (default: 8000) |
References
Available Tools
2 toolsinspectA
Inspect one FIBO class/entity as an LLM-friendly local graph neighborhood.
Use this after discovering a compact URI such as fibo-sec-eq-eq:Share. It returns compact JSON with the queryable URI, labels, definitions, direct parent/child classes, and direct OWL restrictions. This is usually better than asking for only a bare URI because LLMs understand terminology and incident neighborhoods more reliably than isolated graph handles.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| identifier | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description is the sole source of behavioral transparency. It discloses that the output is 'compact JSON' containing specific fields (queryable URI, labels, definitions, direct parent/child classes, direct OWL restrictions), and frames it as a 'local graph neighborhood'. However, it does not explain the effect of the 'limit' parameter or error/edge-case behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences: purpose, usage scenario, and rationale. Every sentence adds value, with technical details packed into the second sentence while keeping the overall text short.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with only two parameters, and an output schema exists, so the return structure is already specified. The description adds usage context and output content expectations, but the unidentified 'limit' parameter leaves a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must fully document parameters. It provides an example identifier ('fibo-sec-eq-eq:Share') and implies it is a compact URI, which helps with the required 'identifier' parameter. But the optional 'limit' parameter is never mentioned, leaving its semantics undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Inspect one FIBO class/entity as an LLM-friendly local graph neighborhood', clearly identifying the verb (inspect), resource (FIBO class/entity), and scope (local graph neighborhood). This differentiates it from the sibling 'sparql' tool, which is a more generic query interface.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit usage context: 'Use this after discovering a compact URI such as fibo-sec-eq-eq:Share.' It also explains why this tool is preferable ('usually better than asking for only a bare URI'), but it does not explicitly mention when to avoid it or name alternatives, just compares to a bare URI approach.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sparqlA
Query FIBO - the financial industry ontology used by major banks and regulators.
ALWAYS use this tool when: 1. Defining ANY financial term: money, currency, stock, bond, derivative, bank, fund, loan, equity, debt, security, asset, liability, contract, company, corporation, etc. 2. Reasoning about financial relationships and regulations 3. Explaining how financial concepts connect to each other 4. Retrieving industry-consensus ontology definitions
THREE-STAGE SYMBOLIC REASONING:
SYMBOL ABSTRACTION (ground terms to FIBO classes): User term "stock" → FIBO class such as fibo-sec-eq-eq:Share (abstract variable) User term "bank" → FIBO class such as fibo-fbc-fct-fse:Bank FIBO ships per-module prefixes (e.g. fibo-sec-eq-eq, fibo-fbc-fi-fi); the server returns whichever module prefix is actually loaded for the URI. Use FILTER(CONTAINS(LCASE(?label), "term")) to find mappings
SYMBOLIC INDUCTION (reason over abstract patterns): Pattern: ?X rdfs:subClassOf+ ?Y → "X is a kind of Y" Pattern: ?X owl:Restriction → "X has constraint on property" Pattern: ?X ?property ?Y → "X relates to Y via property" These patterns are INVARIANT - same reasoning applies regardless of specific classes
RETRIEVAL (map back to user's domain): FIBO result fibo-sec-eq-eq:Share → explain in user's terms "a stock/share/equity" Always translate FIBO URIs back to natural language
FIBO IS A REASONING SCAFFOLD, NOT A PRIOR DISTRIBUTION:
USE for: constraints, formal definitions, taxonomic relationships
DO NOT use for: probabilistic inference (A ⊑ B ≠ P(A|B))
COVERAGE GAPS (not in FIBO - use your knowledge with explicit uncertainty): DeFi (AMM, liquidity pool) | Crypto (stablecoin, NFT) | Islamic (sukuk, murabaha) | Modern (SPAC, SAFE)
FIBO TERM MAPPINGS: money→Currency | stock→Share | bank→FinancialInstitution | company→LegalEntity | country→SovereignState
Returns compact JSON + BM25 suggestions. Built-in prefixes: rdf, rdfs, owl, skos.
FIBO URIs use the module-specific prefixes loaded from the ontology (e.g.
fibo-sec-eq-eq:Share, fibo-fbc-fi-fi:Security). When a URI cannot be compacted
to a valid QName, the server returns the absolute IRI in angle brackets
(<https://spec.edmcouncil.org/fibo/ontology/...>); use that form in your
SPARQL query.
LLM-FRIENDLY QUERYING: Prefer terminology-rich, incident-style rows. The compact URI is a handle; label, definition, superclass labels, property labels, and restrictions carry the meaning. For one entity, use inspect(uri) to fetch its local semantic neighborhood in one call.
QUERY TEMPLATES:
Define: SELECT ?c ?label ?def WHERE { ?c rdfs:label ?label . FILTER(CONTAINS(LCASE(STR(?label)), "term")) OPTIONAL { ?c skos:definition ?def } } LIMIT 10
Inspect via SPARQL: SELECT ?c ?label ?def ?parent ?parentLabel WHERE { BIND(fibo-sec-eq-eq:Share AS ?c) OPTIONAL { ?c rdfs:label ?label } OPTIONAL { ?c skos:definition ?def } OPTIONAL { ?c rdfs:subClassOf ?parent . ?parent rdfs:label ?parentLabel } } LIMIT 20
Hierarchy: SELECT ?ancestor ?label WHERE { rdfs:subClassOf+ ?ancestor . ?ancestor rdfs:label ?label }
Children: SELECT ?child ?label WHERE { ?child rdfs:subClassOf . ?child rdfs:label ?label }
Properties: SELECT ?p ?target ?tLabel WHERE { ?p ?target . FILTER(?p != rdf:type && ?p != rdfs:subClassOf) OPTIONAL { ?target rdfs:label ?tLabel } }
Restrictions: SELECT ?prop ?propLabel ?constraint ?val WHERE { rdfs:subClassOf ?r . ?r a owl:Restriction; owl:onProperty ?prop . OPTIONAL { ?prop rdfs:label ?propLabel } OPTIONAL { ?r owl:someValuesFrom ?val . BIND("someValuesFrom" AS ?constraint) } }
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden and delivers ample behavioral detail. It discloses the return format ('Returns compact JSON + BM25 suggestions'), server-specific behavior for URI prefix handling, and the distinction that FIBO is a reasoning scaffold rather than a probability source. It also covers coverage gaps, which is non-obvious behavioral context that helps set expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely long and contains extensive sections like 'THREE-STAGE SYMBOLIC REASONING' and detailed query templates. While well-structured and front-loaded, not every sentence earns its place; some content (e.g., the reasoning methodology) is more of an AI tutorial than essential tool documentation. It is effective but verbose, making it a 3 rather than a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity—a SPARQL endpoint for a specialized ontology—the description is remarkably complete. It covers purpose, usage rules, return format, URI conventions, coverage gaps, term mappings, and query templates, and even adds an output schema. There is little left to the imagination, making it self-sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only defines a single 'query' string with no description (0% coverage). The description compensates extravagantly by clarifying that the parameter is a SPARQL query, listing built-in prefixes, providing multiple query templates, and explaining how to handle FIBO URIs. This transforms an otherwise opaque parameter into a fully specified interface.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Query FIBO - the financial industry ontology...' using a specific verb and resource. It clearly distinguishes itself from the sibling tool 'inspect' by stating 'For one entity, use inspect(uri) to fetch its local semantic neighborhood in one call,' making the tool's scope unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit 'ALWAYS use this tool when:' list with four concrete scenarios, and a 'DO NOT use for: probabilistic inference' exclusion. It also names the alternative tool 'inspect' and lists coverage gaps where the agent should rely on its own knowledge, giving clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
2 tool updates
v0.1.0- First observed
inspect - First observed
sparql
TDQS
The two tools have clear primary purposes: inspect for a quick local neighborhood of a known entity, sparql for arbitrary queries. While sparql can technically perform inspect's function, the descriptions provide clear usage guidelines, minimizing confusion.
Both tool names are simple, lowercase, and consistent in style. However, they do not follow a more typical verb_noun pattern, and 'sparql' is an acronym rather than a verb, making the pattern less predictable.
With only two tools, the set feels thin for a comprehensive ontology server, but the combination of a general query tool and a convenience inspector covers the core needs. It is borderline, not excessive.
The sparql tool supports arbitrary SPARQL queries, giving full access to FIBO's data. Inspect adds convenience for single-entity lookups. There are no obvious missing operations for read-only ontology exploration.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Connect AI agents to financial institution origination, analytics, and compliance workflows.
Provide AI assistants with real-time access to official SEC EDGAR filings and financial data. Enab…
Broker-only credit/lending discovery shim for AI agents
AI agents query normalized financial services data and run workflows via Milemarker MCP.
Related MCP Servers
AlicenseAqualityAmaintenanceProvides AI agents with instant access to 10M+ OMOP medical vocabulary concepts for searching, mapping, and navigating clinical codes across SNOMED, ICD-10, RxNorm, LOINC, and more.111166MIT- AlicenseNot gradedqualityCmaintenanceEnables AI agents to interact with ontologies through the Ontology Access Kit, providing ontology querying and management capabilities.5MIT
- FlicenseBqualityCmaintenanceEnables SEC EDGAR financial research, analysis, valuation, and chart data generation through natural language.24-
- FlicenseNot gradedqualityAmaintenanceProvides read-only access to curated financial domain knowledge and product data with verified provenance, enabling users to search and retrieve trusted financial information.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/NeuroFusionAI/fibo-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server