Skip to main content
Glama

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-mcp

Installation

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 MCP

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 --materialize

Diagramming 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-expert

Related 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 owl:Class subjects; 1,216 typed RDF/OWL properties; 16,665 URI subjects

Cache

./data/fibo.ttl (base), ./data/fibo_materialized.ttl (with --materialize)

Source revision

f59157fe156e3d91b1c045222d0a7dc06b7d78a2 by default; override with FIBO_REVISION

Refresh cache

uv run main.py --force-download

Server Flags

Flag

Description

--materialize

Enable OWL-RL inference (adds startup time; the materialized graph is cached)

--bm25-top-k N

Number of BM25 search results (default: 10)

--force-download

Re-download the configured FIBO revision

--http

Run as HTTP server instead of stdio

--port N

HTTP server port (default: 8000)

References

Available Tools

2 tools
inspectA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
identifierYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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:

  1. 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

  2. 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

  3. 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) } }

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness3/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 2 tool updatesv0.1.0
    • First observedinspect
    • First observedsparql

TDQS

A4.3/5.0
Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count3/5

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.

Completeness5/5

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

ActivitySlowing
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Provides 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.
    11
    116
    6
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to interact with ontologies through the Ontology Access Kit, providing ontology querying and management capabilities.
    5
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Provides 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

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