Qanat

An MCP server your agent uses to find which valuation indicators hold in an industry, and rank its companies on them, from filings and prices. Connect it to you…

LLM Mart 0 views 6 listing impressions
Transport
Not stated
Package
—
Registry id
—

No install snippet on purpose. A working MCP config is a command, its arguments and an environment block — the last two are where API keys live, so this catalogue never stores them and cannot publish them. Follow the link above for the authors' own instructions.

mcp

Qanat does three things.

  1. Takes the financials out of a filing and adjusts them, each number dated by the day it was knowable rather than the quarter it describes.
  2. Builds valuation indicators from them. Relative ones, like PER and EV/EBITDA, which need a price as well as a filing. Absolute ones, like the floor the balance sheet supports and how far the price sits below it.
  3. Tests whether an indicator holds inside the industry the company belongs to. It ranks that industry's companies on the indicator, holds the top of the ranking, prices what that would have earned after fees, and counts the attempt.

Your agent drives all three over MCP, because which indicators value a factory are not the ones that value a software company, and nobody knows the right set in advance. Point it at any source that carries a timestamp. Connect it to your agent and ask.

Install

Python 3.10 or newer.

uv tool install qanat-fdtl                 # or: pip install qanat-fdtl
qanat init my-research --demo && cd my-research

--demo wires one indicator and one sort over it, runs the pipeline, and prices what each basket held, in about ten seconds. The data is synthetic, so it needs no key and no network. Leave --demo off and you get the same project, unrun.

Qanat makes no network calls of its own. The only ones are what your sources do.

Connect it to an agent

claude mcp add qanat -- qanat mcp --scope research

Any MCP client works:

{ "mcpServers": { "qanat": { "command": "qanat", "args": ["mcp"], "cwd": "/path/to/my-research" } } }

Then ask for things:

  • "What is in this project, and what feeds the momentum indicator?" It traces the table back to its sources and answers from the rows.
  • "Add a trailing-return indicator and test it." Before running anything it comes back with what your data covers and asks you to pick the window, the rebalance and the costs.
  • "Which of my indicators held up?" It lists every step that writes a basket, with what each one earned.
  • "Why did it lose money in March?" It opens that period and shows what was held and what each name returned.

Scopes

--scope picks which tools your agent gets. Each one contains the one before it.

tools
--scope data 6 read the tables, including as they stood on a past date
--scope research 18 adds reading a step, running a replay, reading the result, comparing runs
(default) 27 adds writing steps, sources and universes, and moving the bar

Every tool definition is sent on every request, so a narrow scope costs fewer tokens and leaves the agent a shorter list to choose from. Pick the smallest one that does the job.

The split also decides what a caller can break. set_bar sits in full, so an agent connected at research can record what it tried and cannot lower the line those attempts are held to.

Full table in docs/agents.md.

Serving it to something that is not on this machine

qanat mcp --http --port 8421 --scope research --token "$QANAT_MCP_TOKEN"   # server only
qanat serve --port 8421 --scope research --token "$QANAT_MCP_TOKEN"        # and the scheduler

Both speak MCP's Streamable HTTP transport on /mcp. The scope is fixed by the flag that started the server, so nothing in a request can widen it.

One process serves one project, because the store takes one writer. It binds to 127.0.0.1 unless you say otherwise, and it refuses any other address without a token.

How a project is written

Everything is in one qanat.yaml.

project: equity
store: ./data/qanat.duckdb

universes:                         # which symbols a basket may hold
  - id: sp100
    symbols: ./universes/sp100.csv

From the project's README.

Related servers

MCP server for Geargrafx PC Engine / TurboGrafx-16 emulator

15 views

Read-only discovery for NeuralNg Angular components, APIs, packages, icons and theme recipes.

14 views

Read and write RAGE Package Format archives

13 views

Search 184,900 swim spots, conditions, water activities, providers and guides worldwide.

13 views