Skip to main content
Glama
sepehr071

tgju-mcp

by sepehr071

tgju-mcp: TGJU prices MCP server for AI agents

An unofficial, read-only MCP server for TGJU (شبکه اطلاع‌رسانی طلا، سکه و ارز), Iran's market-price portal: live dollar, euro, gold, coin, crypto and commodity prices, category tables, and daily history.

For AI agents

  • What: unofficial MCP server for tgju.org prices. Persian and English queries work for symbol search.

  • Install: uvx tgju-mcp or claude mcp add tgju -- uvx tgju-mcp. Transport: stdio. Needs uv (Python 3.10+).

  • Auth: none. Optional TGJU_MCP_PROXY (HTTP proxy URL, or a comma-separated list); system proxy settings are ignored.

  • Access: read-only, so no confirmation is needed before calling any tool.

  • Tools: 6, all prefixed tj_. Typical sequence: tj_market_summary -> tj_category_table -> tj_price_history.

  • Output: compact JSON. Iranian prices are quoted by the site in Rial; rial symbols also carry *_toman (Rial / 10). Global symbols (ounce, Brent, crypto in USD, currency pairs) keep their listed unit (unit: as_listed).

  • Machine-readable: server.json.

Related MCP server: coinmarketcap-keyless-mcp

Tools

Tool

Purpose

tj_market_summary

Key rates in one call: dollar, euro, dirham, pound, lira, gold gram/ounce, coins, silver, Brent, Bitcoin, Ethereum, Tether

tj_get_prices

Live price, change, high and low for one or more symbols

tj_category_table

Live price table of a group (gold, coin, coin_retail, currency, currency_government, currency_sana, currency_nima, crypto, or a folder id)

tj_list_categories

Browse the market tree (folders and symbols)

tj_search_symbols

Find symbols by name (internal, global or crypto markets)

tj_price_history

Daily open, low, high, close and change of a symbol, with Jalali date filters

Units

Symbols

Unit

Gold grams, coins, free-market and other price_* currencies, crypto-*-irr

Rial (*_toman = Rial / 10)

ons, silver, oil_*, crypto-* (USD), currency pairs like usd-try-ask

as listed (USD or a ratio)

The feed carries no unit field: the Rial/Toman split is a rule on the symbol name, so check unusual symbols against tgju.org. Folder-id tables apply the rule per row (unit: mixed adds a unit to each row); symbols outside it, such as exchange-house quotes with slug names, stay as_listed.

Reply size and staleness

tj_category_table and tj_price_history accept at most 50 rows (replies stay under about 14 KB). A quote older than 2 days carries stale: true. tj_get_prices answers symbols missing from the live feed (slugs from tj_search_symbols) with the latest daily close (source: history, time = date).

Development

uv sync
uv run ruff check . && uv run ruff format --check .
uv run python -m pytest -q          # offline unit tests
uv run python -m pytest -m live -q  # calls tgju.org
uv build

Not affiliated with TGJU. Prices are informational, not financial advice. MIT license.

Available Tools

6 tools
tj_category_tableCategory price tableA
Read-onlyIdempotent

Live price table of one TGJU group: price, change, day high/low/open per symbol.

Use for 'all gold prices', 'all coin prices', 'all currency rates'. Rial groups carry price_toman (Rial / 10); crypto is USD. A folder id gets the unit per row from the symbol-name rule (unit: mixed adds a unit to each row); unknown symbols, e.g. exchange-house quotes, stay as_listed. stale marks a quote older than 2 days. The crypto preset lists all ~27,000 coins in no useful order: use tj_get_prices for major coins and tj_search_symbols for the rest.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows (50 keeps the reply under 15 KB).
offsetNoRows to skip.
categoryYesPreset (gold, coin, coin_retail, currency, currency_government, currency_sana, currency_nima, crypto) or a folder id from tj_list_categories, e.g. '28070'.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, openWorld, non-destructive), and the description adds substantial context on top: Rial groups return price_toman (Rial / 10), crypto is USD, folder ids derive unit per row from the symbol-name rule, `unit: mixed` adds a per-row unit, unknown symbols stay `as_listed`, and `stale` flags quotes older than 2 days. This is exactly the extra behavioral detail annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and field list, then layered with unit/stale semantics and the crypto routing note. Every sentence carries distinct information, though the density of parenthetical asides makes it slightly heavier than it needs to be.

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?

There is no output schema, so the description must describe return values, and it does: price, change, day high/low/open per symbol, plus unit and stale markers. Combined with the category semantics and the crypto-routing caveat, an agent has everything needed to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, and the description earns above baseline by explaining what the category value actually implies: preset groups have known units (Rial/toman vs USD) while a folder id from tj_list_categories resolves unit per row via the symbol-name rule. It does not, however, add anything about limit/offset beyond the schema.

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 a specific verb+resource+scope: a live price table for one TGJU group, listing the exact fields returned (price, change, day high/low/open per symbol). It clearly differentiates itself from siblings by naming tj_get_prices and tj_search_symbols as the right tools for the crypto case.

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?

It gives concrete use cases ('all gold prices', 'all coin prices', 'all currency rates') and an explicit when-not: the crypto preset lists ~27,000 coins in no useful order, so use tj_get_prices for major coins and tj_search_symbols for the rest. Alternatives and the condition selecting them are stated outright.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tj_get_pricesLive pricesA
Read-onlyIdempotent

Live price, day change, high and low for one or more TGJU symbols.

Use for current rates. Rial symbols also carry *_toman. time is the last update (Tehran time); old values mean the market is closed; stale: true marks a quote older than 2 days. Symbols missing from the live feed (slugs from tj_search_symbols) answer with their latest daily close (source: history, time = date). Unknown symbols are listed in not_found: find them with tj_search_symbols.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolsYesSymbol slugs, e.g. ['price_dollar_rl', 'geram18', 'sekee', 'crypto-bitcoin'].

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the read/idempotent safety profile, but the description discloses much more: 'time' semantics in Tehran time, that old values mean the market is closed, that `stale: true` marks quotes older than 2 days, that missing symbols fall back to daily close with `source: history`, and that unknown symbols land in `not_found`. That is rich operational context well beyond the annotations.

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?

Opens with what is returned, then layers usage, per-symbol fallback semantics, and the recovery path. Four tight sentences carry no filler and every clause adds call-relevant information.

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?

There is no output schema, so the description must carry the return contract, and it does: fields returned, timestamp meaning, staleness flag, source alternation, and the missing-symbol list. An agent can invoke and interpret the response without further data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description goes beyond it by giving example slugs ('price_dollar_rl', 'geram18', 'sekee', 'crypto-bitcoin') and by defining what happens per-symbol when a slug is absent or unknown (daily-close fallback, `not_found`). It does not restate the 30-item cap, minor since the schema declares it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete resource ('Live price, day change, high and low for one or more TGJU symbols') and a clear scope, and 'Use for current rates' implicitly separates it from tj_price_history. It does not name the historical sibling outright, so an agent must infer the boundary rather than read it.

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?

Gives a clear situation ('Use for current rates') and routes the agent to tj_search_symbols twice for resolving unknown slugs, which is a real alternative-selection signal. It stops short of an explicit when-not (e.g. 'for past dates use tj_price_history'), so it falls just under full guideline coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tj_list_categoriesBrowse categoriesA
Read-onlyIdempotent

Browse TGJU's market tree: folders (with ids) and symbols.

Use to discover a group; call tj_category_table with a folder id to get its prices, or pass a symbol from a 'link' item to tj_get_prices. Top level: 28064 gold, 28066 coin, 28069 currency, 28426 crypto, 28048 precious metals, 28049 oil and energy, 28042 commodities.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax items.
offsetNoItems to skip (big folders such as crypto have thousands).
parent_idNoFolder id to open, e.g. '28064' (gold market) or 'currencies'. Omit for the top level.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent and openWorld, so the safety profile is covered. The description adds genuinely non-derivable behavior: the tree yields folders with ids and symbols that arrive as 'link' items, which tells the agent how to chain calls. It does not mention pagination limits or result ordering beyond what the schema implies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the resource and the routing advice, then a compact id list. The trailing top-level enumeration is dense but each entry earns its place as a usable parent_id value; it could be moved to a schema enum, but it does not bloat the core message.

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?

With no output schema, the description carries the return-shape burden and does so adequately: it tells the agent the tree contains folder entries with ids and symbol entries with 'link' values. Pagination behavior for very large folders (noted only in the schema's offset text) is the one gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline would be 3, but the description supplies concrete top-level folder ids (28064 gold, 28066 coin, etc.) that are not in the schema and let the agent call parent_id correctly without a probe. It adds real value over the structured fields.

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?

States a specific verb and resource ('Browse TGJU's market tree') and names exactly what is returned (folders with ids, and symbols). That distinguishes it cleanly from siblings like tj_get_prices or tj_category_table, which consume its output rather than produce the tree.

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?

Explicitly routes the agent: call tj_category_table with a folder id for prices, or pass a 'link' symbol to tj_get_prices. It positions itself as the discovery entry point in a named workflow, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tj_market_summaryKey rates summaryA
Read-onlyIdempotent

Key Iranian market rates in one call: dollar, euro, dirham, pound, lira, gold gram and ounce, coins, silver, Brent, Bitcoin, Ethereum, Tether.

Use first for 'what are today's rates'. Rial values carry *_toman; ounce, Brent, Bitcoin USD and Ethereum are USD. Drill into a group with tj_category_table.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered; the bar is lower. The description adds genuinely new behavioral context by defining unit conventions (*_toman for rial figures, USD for ounce, Brent, Bitcoin and Ethereum), which prevents unit misreads. It does not note data freshness/latency or update cadence, which would matter for a 'today's rates' tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the capability, then the usage rule, then the routing hint — a sensible order with no filler. The long instrument enumeration is slightly list-heavy, though it earns its place by signalling scope.

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?

With no output schema, the description partially compensates by naming the returned instrument groups and clarifying units, which is the key ambiguity for this tool. It stops short of describing the response structure (grouping, ordering, timestamp), which is the remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. The schema is trivially complete and the description correctly spends no space inventing parameter semantics.

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?

Concrete verb-and-resource framing ('Key Iranian market rates in one call') followed by an explicit enumeration of what is returned: dollar, euro, dirham, gold gram/ounce, coins, silver, Brent, Bitcoin, Ethereum, Tether. It also names the drill-down sibling tj_category_table, so an agent can distinguish it from the other price tools.

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?

'Use first for what are today's rates' is an explicit default-selection rule, and 'Drill into a group with tj_category_table' names the alternative and the condition that routes to it. Nothing about when to pick this over its siblings is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tj_price_historyPrice historyA
Read-onlyIdempotent

Daily history (open, low, high, close, change) of a TGJU symbol, for charts and trend questions.

Use after tj_get_prices. Each row has Gregorian date and Jalali jalali; Rial symbols also carry *_toman. Days without a quote are missing. total is the number of rows in range: page with offset.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax daily rows (50 keeps the reply under 15 KB).
offsetNoRows to skip (for older pages).
symbolYesSymbol slug, e.g. 'price_dollar_rl', 'geram18', 'sekee', 'ons', 'crypto-bitcoin'.
to_dateNoJalali end date, e.g. '1405/07/10'.
from_dateNoJalali start date, e.g. '1405/07/01'.
oldest_firstNoSort ascending by date (default newest first).

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/openWorld, and the description adds real behavioral detail beyond them: dual Gregorian/Jalali dates, extra `*_toman` fields for Rial symbols, that gap days are simply absent rather than zero-filled, and that `total` counts rows in range for paging. That is exactly the kind of data-shape caveat an agent cannot infer otherwise.

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?

Two short paragraphs, purpose and when-to-use front-loaded, then return-shape and paging caveats. Every sentence carries information; nothing is repeated from the schema.

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?

With no output schema, the description must describe the return payload, and it does: row fields, calendar duality, toman variants, missing-day semantics, and the paging counter. An agent can call and interpret this tool correctly without further reading.

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 description coverage is 100%, so every parameter is already documented in the schema. The description's 'page with offset' note adds only marginal context on how `offset`/`limit` relate to `total`; it adds no date-format, default, or boundary detail not already present.

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?

States a specific verb and resource — 'Daily history (open, low, high, close, change) of a TGJU symbol' — and even names the row fields returned. The sibling relationship is made clear via 'Use after tj_get_prices', so an agent can separate this historical tool from the current-price tool.

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?

'Use after tj_get_prices' plus 'for charts and trend questions' tells the agent when this tool is the right follow-up. It gives clear positive context but no explicit exclusion (e.g., when to prefer tj_get_prices on its own or tj_market_summary for aggregates).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tj_search_symbolsSearch symbolsA
Read-onlyIdempotent

Find TGJU symbols by name.

Use when you do not know the symbol slug; pass a result's symbol to tj_get_prices or tj_price_history. Main symbols come back as their short live symbol; the rest as a slug, which tj_get_prices answers from the latest daily history row (source: history).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax matches (the site returns at most 10).
queryYesName or code, Persian or English, e.g. 'سکه امامی', 'bitcoin', 'brent'.
scopeNointernal = Iranian markets (gold, coins, currencies, funds), global = world markets and pairs, crypto = coins.internal

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/idempotent/non-destructive. The description adds genuinely new behavioral context: main symbols return a short live symbol while others return a slug, and that slug is answered by tj_get_prices from the latest daily history row with `source: history`. That result-shape disclosure is valuable and not in the annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core action and usage trigger. The final sentence about live symbols vs slugs is slightly dense but earns its place by explaining return semantics absent from any output schema.

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?

With no output schema, the description usefully compensates by explaining what a result contains (short live symbol vs slug) and how slugs resolve downstream. Scope/limit behavior is left to the schema, which fully covers it, so nothing critical is missing.

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 description coverage is 100%, so query, scope, and limit are already documented with examples and enum meanings. The description adds no parameter-level detail beyond 'by name' (which maps to query), so the baseline 3 applies.

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?

States a specific verb and resource (find TGJU symbols by name) and implicitly distinguishes itself from the price-fetching siblings by positioning itself as the slug-discovery step. An agent can tell immediately this is a search/lookup tool, not a data-retrieval tool.

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?

Gives an explicit trigger condition: 'Use when you do not know the symbol slug,' and names the downstream tools to call with the result (tj_get_prices, tj_price_history). It does not state when NOT to use it (e.g., when you already have the slug), but the routing is clear enough to infer.

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.

  1. 6 tool updatesv0.1.0
    • First observedtj_category_table
    • First observedtj_get_prices
    • First observedtj_list_categories
    • First observedtj_market_summary
    • First observedtj_price_history
    • First observedtj_search_symbols

TDQS

A4.4/5.0

Scored across 6 tools

Disambiguation4/5

Each tool has a distinct scope: symbol-level live prices (tj_get_prices), symbol discovery (tj_search_symbols), category browsing (tj_list_categories), group price tables (tj_category_table), a curated key-rates snapshot (tj_market_summary), and daily history (tj_price_history). The three price-returning tools overlap somewhat but are differentiated by breadth (single symbol vs. group vs. key subset), so an agent can pick correctly.

Naming Consistency5/5

All six tools use a uniform tj_ prefix followed by a snake_case verb_noun pattern (get_prices, search_symbols, list_categories, category_table, market_summary, price_history). The convention is predictable throughout with no mixing of styles.

Tool Count5/5

Six tools is well-scoped for a read-only market-data server, covering discovery, live quotes, group tables, a summary, and history without redundancy. Each tool earns its place with a clear role.

Completeness4/5

The surface covers the full read-only lifecycle: discovery (search, categories), current pricing (symbol, group, summary), and historical data. Since the domain is read-only market data, no write operations are expected; minor gaps like bulk multi-symbol history or explicit pagination helpers exist but are workable.

Maintenance

ActivityNo data
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Read-only MCP server for Tehran Stock Exchange (TSETMC) live market data and authenticated TSE portal pages, enabling quotes, order books, market watch, and session-safe page reads via natural language.
    11
    1
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    Enables credential-free, read-only access to selected public market-data routes via 13 typed MCP tools covering asset mapping, metadata, quotes, listings, global metrics, Fear & Greed, Altcoin Season, and CMC index data.
    13
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Enables access to Iran Mercantile Exchange official public statistics and live board snapshots through MCP tools, covering physical, futures, options, certificates, salaf, funds, and financial market data.
    14
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Exposes Tiingo API endpoints as MCP tools, enabling retrieval of end-of-day and intraday prices, forex quotes, news articles, fundamental statements and metrics, dividend distributions and yields, and stock splits. It lets MCP clients query financial market data programmatically using a Tiingo API token.
    -