Skip to main content
Glama
rsc-dev

alpha-mcp

by rsc-dev

alpha-mcp

MCP server for the Alpha team: investing prompts plus read-only lookups in a local replica of Global.db, kept current with sqlite3_rsync. One command to install, auto-updates from git, runs on Linux, macOS and Windows, works from Claude Code, Claude Desktop and Codex.

What it exposes

Kind

Name

Purpose

tool

sync_db

Replicate Global.db from the origin host (only changed pages are transferred)

tool

list_tables

Tables with primary key, columns and row counts

tool

get_row(table, key, key_column=None)

One row by key; pass key_column for natural keys (Yahoo, ThesisCode, Ticker)

tool

find_rows(table, column, value, columns?)

Every row where column = value, e.g. all funds of a provider

tool

get_prompt(name, arguments)

Rendered prompt text, for clients without MCP prompt support (Codex)

tool

update_fund(id, fields, sources?)

Write verified fields of one FundsDataSets row to the local replica (see Fund review)

tool

chatgpt_response_schema()

The key list ChatGPTResponse values must follow

tool

finish_provider_review(provider, notes?)

Stamp PromptProviderFunds.LastReviewDate

tool

list_materials(id), save_material(id, url)

Documents stored for a fund; download a new one, never overwriting

prompt

fund_provider_review

Every file in src/alpha_mcp/prompts/ becomes a prompt

Before any query the server syncs automatically when the replica is missing or older than ALPHA_MCP_DB_MAX_AGE (default 6 h). A failed auto-sync (offline, VPN down) logs a warning and serves the existing replica. The server never writes to the origin.

Related MCP server: Real Estate MCP Server

Requirements

  • uv: curl -LsSf https://astral.sh/uv/install.sh | sh (Linux/macOS), powershell -c "irm https://astral.sh/uv/install.ps1 | iex" (Windows)

  • sqlite3_rsync on PATH, SQLite >= 3.50. It is in the sqlite-tools bundle on sqlite.org (sqlite3_rsync.exe on Windows). To build it on Linux/macOS from the amalgamation: gcc -O2 -DSQLITE_ENABLE_DBPAGE_VTAB tool/sqlite3_rsync.c sqlite3.c -lm -o sqlite3_rsync

  • OpenSSH client (ssh / ssh.exe, preinstalled on Windows 10+) with key access to the origin host. sqlite3_rsync --ssh accepts a program name only, so options go in ~/.ssh/config (C:\Users\you\.ssh\config on Windows):

    Host <origin-host>
      User <origin-user>
      IdentityFile ~/.ssh/<key>
      IdentitiesOnly yes
      BatchMode yes
      ConnectTimeout 10

    BatchMode yes matters: the MCP server has no terminal, so a password prompt would hang until the sync timeout. Accept the host key once by hand (ssh <origin-host>) before relying on it.

Install (teammates)

The origin host, the remote binary path and the repo URL are not in the code. Pass them once; setup stores them in the per-user .env and registers the server in every client it finds:

uvx --from "git+ssh://git@github.com/rsc-dev/alpha-mcp.git@stable" alpha-mcp setup \
  --origin "<user>@<host>:<path>/Global.db" \
  --remote-exe "<path to sqlite3_rsync on the host>" \
  --git "git+ssh://git@github.com/rsc-dev/alpha-mcp.git@stable"

Registered as alpha in Claude Code (user scope), Codex (with skills exported to ~/.agents/skills), and Claude Desktop (its JSON config, if the app is installed). Every later client start re-checks the stable tag and rebuilds only if it moved, so updates need no reinstall. alpha-mcp remove reverses all of it; alpha-mcp remove --purge also deletes the local replica and the per-user .env.

Prompts appear as /mcp__alpha__fund_provider_review in Claude Code, under "+" in Claude Desktop, and as $fund_provider_review skills in Codex (Codex has no MCP prompt support yet; the get_prompt tool is the second fallback there). Codex: raise startup_timeout_sec to 60 and tool_timeout_sec to 300 in [mcp_servers.alpha] of ~/.codex/config.toml; the defaults are too tight for a cold build and a first full sync.

Configuration

Everything is an environment variable. Values come from the process environment first, then from the first .env file that defines them:

  1. the file named by ALPHA_MCP_ENV_FILE

  2. ./.env in the working directory the client started the server in

  3. the per-user file: ~/.config/alpha-mcp/.env (Linux), ~/Library/Application Support/alpha-mcp/.env (macOS), %APPDATA%\alpha-mcp\.env (Windows). This is what setup writes, mode 0600 on POSIX.

.env is gitignored; .env.example documents every key. Rule 2 means a .env in whatever repo you open can redirect the sync to another host, so keep the per-user file as the source of truth and treat repo .env files as you would any other executable content from that repo.

Variable

Default

Meaning

ALPHA_MCP_DB_ORIGIN

(required)

[USER@]HOST:PATH of the live DB

ALPHA_MCP_REMOTE_EXE

--exe on the origin host; leave empty for a local-file origin

ALPHA_MCP_GIT

Source setup registers in the clients

ALPHA_MCP_DB_LOCAL

~/.local/share/alpha-mcp/Global.db, %LOCALAPPDATA%\alpha-mcp\Global.db on Windows

Local replica

ALPHA_MCP_SQLITE3_RSYNC

sqlite3_rsync

Local binary name or full path

ALPHA_MCP_SSH

(ssh)

--ssh program name

ALPHA_MCP_SYNC_VERBOSITY

-vvv

Keep -vv or more: below that the remote command gets 2>/dev/null, which cmd.exe on a Windows origin rejects

ALPHA_MCP_SYNC_ARGS

Extra args, e.g. --protocol 1, --port 2222

ALPHA_MCP_SYNC_TIMEOUT

600

Seconds

ALPHA_MCP_DB_MAX_AGE

21600

Auto-sync when the replica is older than this; 0 disables

ALPHA_MCP_TABLES

Comma-separated allowlist of queryable tables; empty = all

ALPHA_MCP_EXPORT_SKILLS

codex or claude: export prompts as skills on every launch

ALPHA_MCP_ENV_FILE

Explicit .env path, checked first

ALPHA_MCP_MATERIALS_ROOT

~/.local/share/alpha-mcp/Materials

Local root for fund documents

ALPHA_MCP_DATASETS_PREFIX

Z:\DataSets

Prefix stripped from DataSet paths when mapping to the local root

ALPHA_MCP_DOWNLOAD_MAX_MB

50

Per-document download limit

ALPHA_MCP_USER_AGENT

browser-like

User-Agent for document downloads

The replica is switched to WAL mode after the first sync on purpose: in rollback-journal mode a concurrent reader makes sqlite3_rsync fail with database is locked. The -wal/-shm files next to it are normal.

Fund review

/mcp__alpha__fund_provider_review <provider> runs the provider review: for every FundsDataSets row of the provider the client researches the fund (its own web tools), stores the fund's documents with save_material, writes the resolved fields with update_fund, and finally stamps the provider with finish_provider_review. The rules of the review live in the tools, not only in the prompt text:

  • update_fund accepts exactly the review's column list (CUSIP, CINS, ISIN, SEDOL, LEI, RIC, BBGID, FIGI, MIC, the four URL columns, FundName, InceptionDate, FundClosedDate, FundDomicile, AssetClass, FundType, the three frequency columns, IndexName, ChatGPTResponse, ChatGPTLastUpdate, Processed, Notes) and rejects everything else, including ReviewFinished and FundClosed.

  • ISIN, CUSIP/CINS, SEDOL, LEI, FIGI/BBGID are checksum-validated; MIC is format-checked.

  • InceptionDate/FundClosedDate must be YYYY.MM.DD; ChatGPTLastUpdate is YYYY.MM.DD HH:MM:SS and is set automatically when ChatGPTResponse changes; ChatGPTResponse must keep the key set your existing rows use (chatgpt_response_schema returns it); URL columns reject Internet Archive links; a value that is new to a column's vocabulary comes back as a warning, not an error; Notes are appended, never replaced.

  • PromptProviderFunds.LastReviewDate is written as YYYY-MM-DD HH:MM:SS; ReviewFinished is never touched.

Writes never reach the origin. They go to the local replica, and every statement is also appended to <replica>.pending.sql (plus before/after values in <replica>.audit.jsonl). While edits are pending, sync_db and the automatic staleness sync refuse to run, because a sync would overwrite them. Apply the SQL to the origin yourself, then alpha-mcp pending --clear (the file is set aside as .discarded, not deleted), or push the whole replica back with your upload script. Point ALPHA_MCP_DB_LOCAL at the Global.db your download/upload scripts use if you want the server to edit that same file.

Documents stay local. save_material stores into ALPHA_MCP_MATERIALS_ROOT, mirroring the layout under ALPHA_MCP_DATASETS_PREFIX on the origin, so Z:\DataSets\Crypto\Bitwise\BITCCLS - ...\DataSet maps to <root>/Crypto/Bitwise/BITCCLS - .../Materials/. Identical content is reported as duplicate, changed content under an existing name is stored with a date suffix, and each download is logged in the directory's .downloads.jsonl. Only public http(s) hosts are fetched (private and loopback addresses are refused), up to ALPHA_MCP_DOWNLOAD_MAX_MB.

Prompts

One Markdown file per prompt in src/alpha_mcp/prompts/, TOML front matter between +++ lines, {{name}} placeholders in the body ({{today}}, {{today_dotted}} and {{now}} are always available):

+++
name = "my_prompt"
title = "Shown as the prompt's label"
description = "Shown in the client's prompt menu."

[[arguments]]
name = "ticker"
description = "Yahoo symbol, e.g. NVDA"
required = true
+++
Call `get_row("Tickers", "{{ticker}}", key_column="Yahoo")` and ...

Adding a prompt is a PR that adds a file. Tell the model which get_row calls to make; that is what grounds the prompt in the DB.

CLI

alpha-mcp                                  # serve over stdio (what clients run)
alpha-mcp sync [--discard-local]           # replicate Global.db now (refuses while edits are pending)
alpha-mcp pending [--clear]                # SQL of local edits not yet applied to the origin
alpha-mcp setup [--origin] [--remote-exe] [--git]   # save settings, register in clients
alpha-mcp remove [--purge]                 # unregister; --purge also deletes replica + .env
alpha-mcp export-skills codex|claude       # write prompts as SKILL.md files

Development

cp .env.example .env       # fill in the origin; ./.env is read when running from this checkout
uv sync --group dev
uv run alpha-mcp sync      # real sync against the origin host
uv run ruff check src && uv run ruff format --check src
uv run --with "mcp[cli]" mcp dev src/alpha_mcp/server.py:mcp   # MCP Inspector

To exercise the sync without the origin host, point it at a local copy (sqlite3_rsync accepts two local paths):

env ALPHA_MCP_DB_ORIGIN=/path/to/Global.db ALPHA_MCP_REMOTE_EXE= ALPHA_MCP_DB_LOCAL=/tmp/Global.db uv run alpha-mcp sync

The checked-in .mcp.json registers this checkout as server alpha for Claude Code sessions started in this directory (project scope, approval prompted on first use).

Release

# bump version in pyproject.toml and src/alpha_mcp/__init__.py, then
git tag -f stable && git push -f origin stable

Whoever can move stable runs code on every teammate's machine at their next session: protect the tag, require reviews on main, and pin dependencies (uvx --from git does not read uv.lock).

Available Tools

10 tools
chatgpt_response_schemaD

The exact key list (and one example) that ChatGPTResponse values must follow.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

D1.8/5.0
Behavior1/5

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

With no annotations, the description carries the full burden of explaining behavior, but it does not state what the tool does (e.g., returns, validates, or enforces the schema). No side effects, permissions, or operational details are disclosed.

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

Conciseness2/5

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

The description is short and to the point, but it is not structured as an actionable tool description. It reads as a passive statement, lacking the imperative or functional clarity expected from a tool definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description does not explain the tool's purpose, its output, or how it fits into the broader workflow. Even though an output schema exists in the context, the description itself is incomplete and unhelpful for an agent deciding to invoke it.

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 has no parameters, so the schema coverage is trivially complete. The description does not need to explain parameters, and the baseline of 4 applies given zero parameters.

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

Purpose2/5

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

The description states what the tool represents ('the exact key list...that ChatGPTResponse values must follow') but lacks a verb indicating an action. It does not clearly distinguish this tool from its siblings, as it reads more like a specification than a tool behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus any alternative. No conditions, prerequisites, or contexts are mentioned.

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

find_rowsA

Fetch every row where column = value (read-only).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows
tableYesTable name, as returned by list_tables
valueYesValue to match exactly
columnYesColumn to match, e.g. 'FundProvider'
columnsNoColumns to return; omit for all. Use it on FundsDataSets to skip the large JSON columns

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It does disclose 'read-only', which is a meaningful behavioral trait. However, it does not mention the limit parameter's default cap of 200 rows, which contradicts the implication of 'every row', nor does it address pagination, potential performance impacts, or result set size. The information is partially transparent but incomplete.

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 a single, tightly worded sentence with no filler. It front-loads the core action and condition, and the read-only note is useful. Every word earns its place, making it exemplary in conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema is present, so return values are covered. However, the description lacks usage guidance and fails to clarify the limit behavior relative to the 'every row' claim. Given the tool's complexity (5 params, 3 required) and the existence of sibling tools, the description is adequate but not fully complete for correct invocation in all scenarios.

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 the schema already documents all parameters, including the limit, table, column, value, and columns fields. The description adds no additional parameter context beyond what the schema provides, so the baseline score of 3 is appropriate.

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 clearly states the verb ('Fetch'), the resource ('every row'), and the condition ('where column = value'), and explicitly marks it as read-only. This distinguishes it from sibling tools like get_row (single row) and list_tables (table listing), even without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives such as get_row or list_tables. It only states the action and read-only nature, leaving the agent to infer the appropriate context. No exclusions or alternative conditions are provided.

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

finish_provider_reviewA

Stamp the provider's LastReviewDate (YYYY-MM-DD HH:MM:SS). Never changes ReviewFinished.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoOptional note to append to the provider's Notes
providerYesPromptProviderFunds.Name, exactly as stored

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It transparently states the primary action and explicitly notes a key non-effect (doesn't change ReviewFinished), which is useful. However, it doesn't disclose potential side effects, permissions, or reversibility, leaving gaps for an agent to infer.

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 sentences with no fluff. The core action is front-loaded, and the critical non-effect is stated concisely. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema and the description covers the essential behavior, it's functionally complete for a simple stamping action. However, the lack of usage context and alternative routing makes it less complete for an agent deciding between tools, especially with several sibling tools that could overlap.

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?

The input schema covers both parameters (provider and notes) with descriptions, so the schema already provides full semantic coverage. The description adds no additional parameter-level detail beyond the schema, making the baseline 3 appropriate.

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 clearly identifies the action ('Stamp') and the specific resource ('provider's LastReviewDate'), and distinguishes it from related actions by stating it never changes ReviewFinished. This is specific and unambiguous, differentiating it from siblings like update_fund.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as update_fund or save_material. It doesn't mention prerequisites, typical scenarios, or conditions that would favor this tool. The 'Never changes ReviewFinished' note is a behavioral constraint, not usage guidance.

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

get_promptA

Fallback for clients without MCP prompt support: returns the rendered prompt text to follow.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPrompt name; one of: fund_provider_review
argumentsNoPrompt arguments, e.g. {'ticker': 'NVDA'}

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It discloses the core behavior (returns rendered prompt text) but does not cover error handling for unknown names, how arguments are interpolated, or response structure beyond what the output 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.

Conciseness5/5

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

A single sentence that front-loads the core purpose ('Fallback for clients without MCP prompt support') before stating the return behavior. Zero wasted words — every clause earns its place.

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?

For a simple renderer with a full output schema and 100% parameter coverage, the description adequately explains the tool's existence (fallback) and its output. The only minor gap is error behavior on invalid prompt names, which is not critical for a straightforward lookup tool.

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%, with both parameters well documented (name constrained to 'fund_provider_review', arguments with a ticker example). The description adds no parameter-level detail beyond the schema, so the baseline of 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?

The description names a specific verb ('returns') and resource ('rendered prompt text'), and frames the tool's role as a fallback for clients without MCP prompt support. It is clearly distinct from all siblings, none of which relate to prompt rendering, so an agent can differentiate it without opening any other schema.

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?

The 'Fallback for clients without MCP prompt support' phrasing gives concrete usage context — use this when the client lacks native prompt support. It does not explicitly name an alternative call or state when-not-to-use, but the fallback framing carries clear selection logic.

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

get_rowA

Fetch one row from a table by key. Returns {'found': false} when there is no match.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesKey value, e.g. a Yahoo symbol like 'NVDA' or a ThesisCode
tableYesTable name, as returned by list_tables
key_columnNoColumn to match, e.g. 'Yahoo' or 'ThesisCode'; defaults to the table's primary key (usually the integer ID)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It discloses the not-found return shape ({'found': false}), which is valuable. It does not mention errors or authentication, but for a simple read operation this is reasonably transparent given the existence of an output schema.

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?

A single sentence with no unnecessary words. The core action is front-loaded, and the behavioral note about not-found is placed at the end, keeping the description lean and scannable.

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 an output schema present and parameters fully documented, the description covers the key behavioral case (not-found). Missing explicit usage guidance is a minor gap, but overall it is adequate for a simple fetch tool.

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 100%, so all parameters are described in the schema. The description adds minimal value beyond the schema, only restating the concept of a key. Per the baseline rule for high coverage, a 3 is appropriate.

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 the verb 'Fetch', the resource 'one row from a table by key', and implies a single-row lookup that distinguishes it from siblings like find_rows (multiple rows) and list_tables (listing tables). The description is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Does not explicitly state when to use this tool versus alternatives like find_rows or list_tables. The purpose implies single-key lookups, but there is no mention of exclusions or the conditions under which another tool should be chosen.

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

list_materialsB

Documents already stored for a fund, and where its Materials directory is.

ParametersJSON Schema
NameRequiredDescriptionDefault
fund_idYesFundsDataSets.ID

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It indicates the output (documents and directory) but does not state whether the operation is read-only, whether it has side effects, or any prerequisites like fund existence. It does not contradict annotations (none exist) but provides minimal behavioral disclosure.

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 a single concise sentence with no wasted words. It front-loads the primary purpose (documents for a fund) and adds the secondary detail (directory location). It is efficiently structured and easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has one parameter and an output schema exists, so return values need not be described. However, the description does not mention any special behaviors, edge cases, or prerequisites (e.g., whether the fund must exist, whether the directory is always returned). It is minimal but covers the core purpose.

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?

The input schema fully documents fund_id with description 'FundsDataSets.ID' (100% coverage). The description does not mention fund_id or add any context about it, so it contributes nothing beyond the schema. Baseline 3 is appropriate given high schema coverage.

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?

The description states the tool returns documents already stored for a fund and the location of its Materials directory, which clearly identifies the resource and implies a listing operation. It is distinct from siblings like save_material (which writes) and find_rows (which searches rows). However, it does not explicitly use a verb like 'list' or 'retrieve', so it could be clearer about the action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. The description does not mention any context such as 'check before saving' or compare to find_rows or get_row. An agent has no explicit criteria for selecting this tool over its siblings.

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

list_tablesA

List queryable tables with their primary key, columns and row counts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral burden. It clearly conveys a read-only metadata listing operation and specifies what information is returned. It does not explicitly mention side-effect freedom, but 'list' strongly implies a non-mutating operation and no hidden destructive behavior is suggested.

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?

A single, focused sentence that leads with the action and resource, then lists the specific output fields. Every word earns its place with no redundancy or irrelevant detail.

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?

For a zero-parameter, read-only list operation with an output schema available, the description is fully sufficient. The agent knows exactly what the tool does, what it returns, and that the call requires no arguments. Nothing essential is missing.

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 has zero parameters, so the baseline is 4. The description adds no parameter detail because none exists; the schema already fully covers the argument surface. No further parameter semantics are needed.

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 uses a specific verb ('List'), a clear resource ('queryable tables'), and defines the exact return contents (primary key, columns, row counts). It clearly distinguishes itself from sibling tools like list_materials by focusing on tables rather than materials.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its use case: call it when you need an inventory of available tables and their schema details. However, it does not explicitly state when to prefer this over alternatives or provide exclusions, leaving some inference to the agent.

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

save_materialA

Download one document into the fund's Materials directory. Never overwrites earlier documents: identical content is reported as 'duplicate', changed content is stored under a dated name.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesDocument URL (fact sheet, prospectus, KID, index methodology, ...)
fund_idYesFundsDataSets.ID the document belongs to
filenameNoOverride the stored file name

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

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

With no annotations provided, the description bears full responsibility for disclosing side effects. It explicitly states that the tool downloads, never overwrites, reports identical content as 'duplicate', and stores changed content under a dated name—covering key behavioral traits.

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 two sentences long, directly states the primary action, and explains the duplicate/versioning behavior. It is well-structured and free of unnecessary details, making it easy to parse.

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?

Given that an output schema exists, the description does not need to explain return values. It provides sufficient context about the save behavior, duplicate handling, and file naming, though it does not mention prerequisites or error conditions beyond duplicates. Overall, it is complete enough for the tool's purpose.

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% for all three parameters, so the baseline is 3. The description adds minimal extra meaning beyond the parameter descriptions—it confirms the url is the document source and fund_id refers to the fund, but these are already in 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 clearly states the tool downloads a document into the fund's Materials directory, specifying the action and resource. It also mentions duplicate handling, which distinguishes it from listing or syncing tools. The verb 'Download' is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains how the tool behaves (never overwrites, reports duplicates, uses dated names) but does not explicitly state when to use this tool versus alternatives like list_materials or sync_db. The usage is implicit rather than directly contrasted with sibling tools.

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

sync_dbA

Replicate the latest Global.db from the origin host with sqlite3_rsync over ssh.

Only changed pages are transferred, so this is cheap and safe to call often. Refuses while local
edits made by update_fund / finish_provider_review are pending, because they would be overwritten.
ParametersJSON Schema
NameRequiredDescriptionDefault
discard_local_changesNoSet aside pending local edits (kept in a .discarded file) so the sync may proceed

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It covers the transfer mechanism, page-level efficiency, safety profile, refusal behavior, overwrite risk, and the .discarded-file behavior via the parameter description. This is unusually complete for an unannotated tool.

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 compact and front-loaded: it opens with the core operation, then adds cost/safety, then the critical caveat. Every sentence earns its place and there is no repetition of schema content.

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?

For a tool with one optional parameter and an output schema, the description covers operation, safety, preconditions, failure mode, and the parameter's effect. Nothing an agent needs to correctly invoke it is missing.

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 input schema already documents discard_local_changes with 100% coverage, so the baseline is 3. The description adds meaning by explaining why the parameter matters: without it the sync refuses because pending edits would be overwritten, and with it those edits are set aside.

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 states a specific verb ('Replicate'), a concrete resource ('Global.db'), and the mechanism ('sqlite3_rsync over ssh'). It clearly differentiates itself from siblings like update_fund and finish_provider_review, which are framed as producers of pending edits rather than sync operations.

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 explicitly says when to call ('cheap and safe to call often') and when not to call ('Refuses while local edits... are pending'). It also names the sibling tools that create the conflicting state, giving the agent actionable context for deciding whether to pass discard_local_changes.

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

update_fundA

Write verified fields for one fund to the local replica. Only send values you are certain of.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesColumn -> new value. Only the review's allowlisted columns are accepted; identifiers are checksum-validated; InceptionDate/FundClosedDate use YYYY.MM.DD; ChatGPTLastUpdate uses 'YYYY.MM.DD HH:MM:SS' (auto-set when ChatGPTResponse changes); ChatGPTResponse must keep the existing key schema (see chatgpt_response_schema); URL fields reject Internet Archive links
fund_idYesFundsDataSets.ID
sourcesNoURLs/documents the values were verified against
append_notesNoAppend to existing Notes instead of replacing them

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It discloses that the operation writes to a local replica and warns against uncertain values, but it does not explain side effects, permissions, overwrite behavior, or what happens after the write. For a mutating tool this is a meaningful transparency gap.

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 sentences, front-loaded with the core purpose and followed by a necessary guardrail. No filler or repetition; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema and output schema cover parameter details and return shape, and the description covers the core purpose and the 'verified values' rule. Still, it lacks explicit usage routing among siblings and does not describe behavioral side effects, so the agent is left to infer when and how safely to invoke it.

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 the parameter descriptions already document fund_id, fields, sources, and append_notes. The tool description adds no parameter-specific meaning beyond the general warning to send only certain values, which matches the baseline of 3.

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 ('Write verified fields for one fund') and adds a critical scope qualifier ('to the local replica'), which distinguishes it from the sync_db sibling. The warning about only sending certain values reinforces the operation's intent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The instruction 'Only send values you are certain of' is a clear input-quality guideline, and 'local replica' implies this is for local persistence rather than syncing. However, the description does not explicitly say when to prefer this tool over siblings such as save_material or sync_db, leaving the choice mostly implied.

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. 10 tool updatesv0.1.0
    • First observedchatgpt_response_schema
    • First observedfind_rows
    • First observedfinish_provider_review
    • First observedget_prompt
    • First observedget_row
    • First observedlist_materials
    • First observedlist_tables
    • First observedsave_material
    • First observedsync_db
    • First observedupdate_fund

TDQS

B3.2/5.0
Disambiguation4/5

Most tools have clear distinct purposes, but update_fund and finish_provider_review could be confused if both can modify LastReviewDate. The auxiliary tools (get_prompt, chatgpt_response_schema) are clearly separate from data operations.

Naming Consistency4/5

All names are lowercase snake_case, mostly following verb_noun pattern (list_materials, save_material, sync_db). The one exception is chatgpt_response_schema, which is a noun phrase, deviating from the otherwise consistent verb-noun style.

Tool Count5/5

With 10 tools, the server is well-scoped for its purpose—managing fund data, materials, and database sync. Each tool serves a distinct function without excess, and the count falls within the ideal range.

Completeness3/5

The core workflows (syncing, updating funds, saving materials, querying rows) are covered, but there are gaps: no tool for deleting materials or funds, no explicit creation of funds (only sync), and provider review only has a 'finish' operation. Generic query tools partially compensate, but lifecycle coverage is incomplete.

Maintenance

ActivityMaintained
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
    Not graded
    quality
    B
    maintenance
    Enables read-only access to Interactive Brokers data including contracts, market data, news, fundamentals, and portfolio/account information for LLM workflows and autonomous agents.
    17
    BSD 3-Clause
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables structured real estate workflows including property search, agent/client management, market intelligence, mortgage calculations, valuation, investment analysis, and document ingestion, with offline-first capabilities and optional live data integrations.
    AGPL 3.0
  • F
    license
    Not graded
    quality
    B
    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/rsc-dev/alpha-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server