Capital Flow Desk — UnlockFlow MCP
Capital Flow Desk — MCP UnlockFlow (thin)
Thin stdio MCP server that exposes UnlockFlowEvent v1 tools for directory / host listing readiness.
Product: CFD Agent Feed (SKU B) sample surface
Schema: UnlockFlowEvent schema_version: "1" (copied from ../agent-feed/schema.json)
Status: Local illustrative seeds only — not a live authenticated feed
NFA: Research framing. Not financial advice. Do not convert sell_pressure_score into trade instructions.
What it is
Wedge | Supply shock → capital-flow judgment (calendar is input; realized flow is the read) |
Transport | stdio (MCP host launches this process) |
Data |
|
Schema tool |
|
This package is for MCP directory listing / host wiring demos. Live Agent Feed pull + Pro webhook stay behind onboarding — no API tokens in this repo.
Related MCP server: hashlock-mcp
Tools
Tool | Args | Returns |
|
| Local UnlockFlowEvent[] (+ count / NFA note) |
|
| One UnlockFlowEvent |
| — | UnlockFlowEvent JSON Schema v1 |
Horizons: T-30 · T-7 · T-48h · T0 · T+7.
Seed ids:
uf_20261005_ena_t30— Ethena original-investor acceleration (size estimate)uf_20260920_zro_t48h— LayerZero digest cliff window (estimate labels)
Always surface disclaimer: "NFA" and respect precision_grade / illustrative.
Run locally (stdio)
Requires Node.js ≥ 20.
cd /workspace/crypto-research-desk/mcp-unlockflow
npm install
npm startnpm start runs npx tsx src/index.ts and speaks MCP over stdin/stdout (log only on stderr).
Cursor / Claude Desktop style config
Repo-root .mcp.json (Open Plugins / cursor.directory auto-detect):
{
"mcpServers": {
"cfd-unlockflow": {
"command": "npx",
"args": ["-y", "tsx", "src/index.ts"]
}
}
}Paste the same block into Cursor Settings → MCP / Claude Desktop mcpServers, or clone this repo and point the host at it.
After npm publish (@capitalflowdesk/mcp-unlockflow):
{
"mcpServers": {
"cfd-unlockflow": {
"command": "npx",
"args": ["-y", "@capitalflowdesk/mcp-unlockflow"]
}
}
}Or after local npm install:
npm run startOptional smoke with Inspector (host launches the process):
npx @modelcontextprotocol/inspector npx tsx src/index.tsPricing (draft Agent Feed)
Tier | Price | Includes (draft) |
Starter | 99 USDT / mo | Authenticated UnlockFlowEvent pull; schema-stable v1 |
Pro | 299 USDT / mo | Starter + webhook ( |
Settlement: USDT TRC-20 · wallet in ../PRODUCTS.md
Onboard: @CapitalFlowDeskBot or @Mohammad_GNA — subject Agent Feed / UnlockFlowEvent.
Human Telegram membership is a separate SKU — do not paste Members invite links here.
Registry metadata
server.json is a draft for Official MCP Registry readiness. Do not publish until namespace ownership and packaging are intentional.
Layout
mcp-unlockflow/
.mcp.json # cursor.directory / Open Plugins auto-detect
README.md
package.json
server.json # registry draft — do not publish until intentional
bin/cfd-mcp-unlockflow.js
src/index.ts # stdio MCP
scripts/publish-npm.sh
data/
events.json # ENA + ZRO illustrative seeds
unlock-flow-event.schema.jsonDeps: @modelcontextprotocol/sdk, zod, tsx.
Not financial advice.
Smoke test
cd mcp-unlockflow && npx tsx scripts/smoke.tsExpect SMOKE_PASS and tools: list_unlock_events, get_unlock_event, get_schema.
Install (Cursor / Claude Desktop / cursor.directory)
cursor.directory — open https://cursor.directory/plugins/new → paste
https://github.com/mhr2027r-dotcom/mcp-unlockflow
Auto-detect uses repo-root.mcp.json.Manual host config (same payload as
.mcp.json):
{
"mcpServers": {
"cfd-unlockflow": {
"command": "npx",
"args": ["-y", "tsx", "src/index.ts"]
}
}
}Run from a clone of this repo (host cwd = repo root), or after publish:
{
"mcpServers": {
"cfd-unlockflow": {
"command": "npx",
"args": ["-y", "@capitalflowdesk/mcp-unlockflow"]
}
}
}Clone: git clone https://github.com/mhr2027r-dotcom/mcp-unlockflow.git
Live Agent Feed (paid)
Illustrative seeds only in this repo. Live UnlockFlow feed after USDT TRC-20 onboard:
Starter 99 / Pro 299 USDT · @CapitalFlowDeskBot · @Mohammad_GNA
Free notes: https://t.me/CapitalFlowDeskHQ
NFA.
Available Tools
3 toolsget_schemaA
Return UnlockFlowEvent JSON Schema v1 (schema_version "1").
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It states only that it 'Return[s]' a schema, which implies a read-only, side-effect-free operation but does not explicitly state this. It does not mention any error conditions, authentication, or version nuances beyond the name. For such a trivial tool, this is adequate but minimal.
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 entire description is a single, focused sentence that front-loads the action and the resource. Every word earns its place, with no filler or redundancy.
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 no parameters and no output schema, the description provides everything needed to call it correctly. It states what is returned (the schema) and its version. There are no hidden requirements or unexplained behaviors. An agent can invoke this tool confidently with no further context.
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?
There are zero parameters, so according to the rubric the baseline is 4. The description adds no parameter-specific detail because none exist; the schema already reflects an empty parameter set. No compensation is 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 states a specific verb ('Return') and a precise resource ('UnlockFlowEvent JSON Schema v1') with version info. It clearly distinguishes from siblings (list_unlock_events, get_unlock_event) by focusing on the schema itself rather than event instances.
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?
While it does not explicitly mention alternatives or when not to use it, the context is clear: this tool is for retrieving the schema, not for listing or fetching actual events. For a zero-parameter getter, the purpose itself provides enough usage guidance, though it lacks an explicit exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_unlock_eventA
Fetch one UnlockFlowEvent by event_id from local illustrative seeds.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | Stable event id, e.g. uf_20261005_ena_t30 |
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 usefully discloses that the data comes from 'local illustrative seeds,' implying a limited demo dataset and a read-only operation. It does not mention missing-ID behavior, return format, or whether the data is static, so some transparency gap remains.
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, front-loaded sentence with no filler. It conveys the action, target, key, and data source efficiently, earning its place entirely.
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 single-parameter read operation, the description covers the purpose, the required identifier, and the data source. The absence of an output schema means return details are not spelled out, but the tool name and description make clear that an UnlockFlowEvent is returned; the only minor omissions are error behavior and explicit sibling guidance.
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%, and the schema already documents event_id with a concrete example. The description only names the parameter without adding new semantic detail, so it stays at the baseline for 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 a specific verb ('Fetch'), a specific resource ('one UnlockFlowEvent'), and the lookup key ('by event_id'). It clearly differentiates from the sibling list_unlock_events, since it targets a single item rather than a collection.
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 use case is implied: use this tool when you have a specific event_id and need one event, while list_unlock_events is the likely alternative for fetching multiple events. However, the description never explicitly names this sibling or states when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_unlock_eventsA
List local UnlockFlowEvent v1 samples (illustrative). Optional filters: asset ticker, horizon. Seeds have illustrative:true — NFA, not live Agent Feed. Live feed: @CapitalFlowDeskBot / @Mohammad_GNA (99/299 USDT TRC-20).
| Name | Required | Description | Default |
|---|---|---|---|
| asset | No | Optional ticker filter, e.g. ENA or ZRO (case-insensitive) | |
| horizon | No | Optional horizon: T-30 | T-7 | T-48h | T0 | T+7 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and it uses 'local,' 'illustrative,' 'NFA,' and 'not live Agent Feed' to disclose that the data is seeded/non-authoritative rather than real-time. It does not detail response shape or side effects, but this is a read-oriented list operation and the most important behavioral caveat is clearly stated.
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 main statement is front-loaded and brief, but the last sentence about the bot handle and '99/299 USDT TRC-20' introduces payment details that are not necessary for selecting or invoking the tool. The phrase 'seeds have illustrative:true' also partially duplicates 'illustrative.'
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 list call with two fully documented optional params and no required inputs, the description covers purpose, filter availability, and data provenance. There is no output schema, but the behavior is simple enough that an agent can invoke the tool without more context.
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%, and the schema already documents both optional filters, enums, and case-insensitivity. The description only restates 'asset ticker, horizon' as optional filters, adding no new semantics.
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 opening verb 'List' plus object 'local UnlockFlowEvent v1 samples' clearly states the operation and resource, and the parenthetical 'illustrative' immediately signals this is not a live-data tool. It is distinguishable from sibling get_unlock_event (list vs single event) and get_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 description says the seeds are illustrative and 'not live Agent Feed,' and points to a live-feed source, so an agent knows when this list is appropriate for sample data versus when to go external. It does not explicitly address sibling get_unlock_event, but the list-vs-get distinction is straightforward.
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.
3 tool updates
v0.1.0- First observed
get_schema - First observed
get_unlock_event - First observed
list_unlock_events
TDQS
Scored across 3 tools
Each tool has a distinct purpose: listing events, fetching a single event by ID, and retrieving the schema. There is no overlap or ambiguity between them.
All tool names follow a consistent verb_noun pattern: list_unlock_events, get_unlock_event, and get_schema. The naming is predictable and easy to infer.
Three tools is appropriate for a server scoped to illustrative local samples. Each tool earns its place: list, get, and schema introspection.
For the stated purpose of accessing local illustrative UnlockFlowEvent v1 samples, the surface is complete: list, fetch by ID, and schema retrieval cover all necessary read-only operations. Live feed and mutation tools are explicitly out of scope.
Maintenance
Related MCP Connectors
Whale & Institutional Flow MCP — 8 tools: TVL flows, alpha signals, stablecoin supply.
Live whale movements, wallet intel and Alpha-bot signals across 34+ EVM chains, over MCP.
DefiLlama MCP — TVL, yields, volumes, fees, and protocol analytics for DeFi.
Crypto market data & research MCP: price, derivatives, on-chain, sentiment, news, catalysts.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceWhale & Institutional Flow MCP Server — 8 tools for protocol TVL flows, alpha signals, stablecoin supply tracking. Part of ToolOracle (tooloracle.io).-

hashlock-mcpofficial
AlicenseAqualityAmaintenanceHashlock Markets — sealed-bid intent-based crypto trading via MCP for AI agents. Atomic cross-chain settlement (Ethereum, Bitcoin, Sui) using HTLC. Six MCP tools for RFQ price discovery without information leakage and HTLC settlement without escrow or bridges. Canonical npm: @hashlock-tech/mcp.13139 npmMIT- AlicenseAqualityAmaintenanceBTC Decision Terminal for AI Agents — live vault-backed Hyperliquid signals, on-chain proof, cross-chain swap. MCP server hosted at https://hypernatt.com/mcp/protocol. 11 tools. Verify in real time.33MIT
- AlicenseAqualityDmaintenanceNarrative & signal intelligence for AI agents: crypto/AI/macro convergence & divergence.21MIT