alpha-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@alpha-mcpFind all funds managed by Vanguard."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 |
| Replicate |
tool |
| Tables with primary key, columns and row counts |
tool |
| One row by key; pass |
tool |
| Every row where column = value, e.g. all funds of a provider |
tool |
| Rendered prompt text, for clients without MCP prompt support (Codex) |
tool |
| Write verified fields of one |
tool |
| The key list |
tool |
| Stamp |
tool |
| Documents stored for a fund; download a new one, never overwriting |
prompt |
| Every file in |
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_rsynconPATH, SQLite >= 3.50. It is in thesqlite-toolsbundle on sqlite.org (sqlite3_rsync.exeon 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_rsyncOpenSSH client (
ssh/ssh.exe, preinstalled on Windows 10+) with key access to the origin host.sqlite3_rsync --sshaccepts a program name only, so options go in~/.ssh/config(C:\Users\you\.ssh\configon Windows):Host <origin-host> User <origin-user> IdentityFile ~/.ssh/<key> IdentitiesOnly yes BatchMode yes ConnectTimeout 10BatchMode yesmatters: 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:
the file named by
ALPHA_MCP_ENV_FILE./.envin the working directory the client started the server inthe per-user file:
~/.config/alpha-mcp/.env(Linux),~/Library/Application Support/alpha-mcp/.env(macOS),%APPDATA%\alpha-mcp\.env(Windows). This is whatsetupwrites, 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 |
| (required) |
|
|
| |
| Source | |
|
| Local replica |
|
| Local binary name or full path |
| (ssh) |
|
|
| Keep |
| Extra args, e.g. | |
|
| Seconds |
|
| Auto-sync when the replica is older than this; |
| Comma-separated allowlist of queryable tables; empty = all | |
|
| |
| Explicit | |
|
| Local root for fund documents |
|
| Prefix stripped from |
|
| Per-document download limit |
| browser-like |
|
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_fundaccepts 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, includingReviewFinishedandFundClosed.ISIN, CUSIP/CINS, SEDOL, LEI, FIGI/BBGID are checksum-validated; MIC is format-checked.
InceptionDate/FundClosedDatemust beYYYY.MM.DD;ChatGPTLastUpdateisYYYY.MM.DD HH:MM:SSand is set automatically whenChatGPTResponsechanges;ChatGPTResponsemust keep the key set your existing rows use (chatgpt_response_schemareturns 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;Notesare appended, never replaced.PromptProviderFunds.LastReviewDateis written asYYYY-MM-DD HH:MM:SS;ReviewFinishedis 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 filesDevelopment
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 InspectorTo 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 syncThe 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 stableWhoever 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 toolschatgpt_response_schemaD
The exact key list (and one example) that ChatGPTResponse values must follow.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows | |
| table | Yes | Table name, as returned by list_tables | |
| value | Yes | Value to match exactly | |
| column | Yes | Column to match, e.g. 'FundProvider' | |
| columns | No | Columns to return; omit for all. Use it on FundsDataSets to skip the large JSON columns |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Optional note to append to the provider's Notes | |
| provider | Yes | PromptProviderFunds.Name, exactly as stored |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Prompt name; one of: fund_provider_review | |
| arguments | No | Prompt arguments, e.g. {'ticker': 'NVDA'} |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key value, e.g. a Yahoo symbol like 'NVDA' or a ThesisCode | |
| table | Yes | Table name, as returned by list_tables | |
| key_column | No | Column to match, e.g. 'Yahoo' or 'ThesisCode'; defaults to the table's primary key (usually the integer ID) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| fund_id | Yes | FundsDataSets.ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Document URL (fact sheet, prospectus, KID, index methodology, ...) | |
| fund_id | Yes | FundsDataSets.ID the document belongs to | |
| filename | No | Override the stored file name |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.| Name | Required | Description | Default |
|---|---|---|---|
| discard_local_changes | No | Set aside pending local edits (kept in a .discarded file) so the sync may proceed |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | Column -> 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_id | Yes | FundsDataSets.ID | |
| sources | No | URLs/documents the values were verified against | |
| append_notes | No | Append to existing Notes instead of replacing them |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
10 tool updates
v0.1.0- First observed
chatgpt_response_schema - First observed
find_rows - First observed
finish_provider_review - First observed
get_prompt - First observed
get_row - First observed
list_materials - First observed
list_tables - First observed
save_material - First observed
sync_db - First observed
update_fund
TDQS
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.
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.
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.
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
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
Market data, financial statements, valuation, research, and news for investment workflows.
Read-only tokenized stock data: issuers, chains, contract addresses and corporate actions.
Read-only access to your bank, investment, and crypto accounts: balances, transactions, holdings.
Read-only bank & investment accounts via Plaid: balances, holdings, transactions, SQL analytics.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables read-only access to Interactive Brokers data including contracts, market data, news, fundamentals, and portfolio/account information for LLM workflows and autonomous agents.17BSD 3-Clause
- AlicenseNot gradedqualityBmaintenanceEnables 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
- FlicenseNot gradedqualityBmaintenanceProvides read-only access to a SQL Server investment database, enabling searching symbols, retrieving prices and history, and generating research snapshots.-
- FlicenseNot gradedqualityBmaintenanceProvides read-only access to curated financial domain knowledge and product data with verified provenance, enabling users to search and retrieve trusted financial information.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rsc-dev/alpha-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server