@flowframe22/mcp-server 0.1.0 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * and one transparent retry on transient network failures.
5
5
  */
6
6
  const DEFAULT_BASE_URL = "https://flowframe.xyz";
7
- const USER_AGENT = "flowframe-mcp-server/0.1.0";
7
+ const USER_AGENT = "flowframe-mcp-server/0.2.0";
8
8
  export class FlowFrameApiError extends Error {
9
9
  status;
10
10
  code;
@@ -0,0 +1,44 @@
1
+ /**
2
+ * `defineTool` — DRY wrapper for the FlowFrame MCP tool registration pattern.
3
+ *
4
+ * Every tool in `tools.ts` repeats the same skeleton:
5
+ *
6
+ * server.tool(name, description, inputSchema, async (args) => {
7
+ * try {
8
+ * const env = await client.get<...>(path, query);
9
+ * return formatEnvelope(title, env, body);
10
+ * } catch (err) {
11
+ * return formatError(err as FlowFrameApiError);
12
+ * }
13
+ * });
14
+ *
15
+ * `defineTool` factors out the try/catch + `formatError` boilerplate so a
16
+ * tool definition is just: input schema + `fetch(client, args)` + `format(env, args)`.
17
+ *
18
+ * Intentionally a thin helper. We do NOT take over input validation
19
+ * (zod still runs via `server.tool`), URL building (the FlowFrameClient
20
+ * already handles that), or formatting (callers still produce the
21
+ * `ToolResult` so each tool keeps its bespoke prose). The win is purely
22
+ * removing duplicated error-handling code from each tool.
23
+ */
24
+ import { z, ZodRawShape } from 'zod';
25
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
26
+ import { FlowFrameClient, type Envelope } from './client.js';
27
+ import { type ToolResult } from './formatter.js';
28
+ interface DefineToolConfig<Shape extends ZodRawShape, T> {
29
+ name: string;
30
+ description: string;
31
+ inputSchema: Shape;
32
+ /**
33
+ * Make the actual `/v1/*` call via the shared FlowFrameClient.
34
+ * Throwing FlowFrameApiError (or anything) routes through formatError.
35
+ */
36
+ fetch: (client: FlowFrameClient, args: z.objectOutputType<Shape, z.ZodTypeAny>) => Promise<Envelope<T>>;
37
+ /**
38
+ * Project the envelope into a ToolResult (text + structuredContent).
39
+ * Use the `formatEnvelope` / `formatPlain` helpers from `./formatter.js`.
40
+ */
41
+ format: (env: Envelope<T>, args: z.objectOutputType<Shape, z.ZodTypeAny>) => ToolResult;
42
+ }
43
+ export declare function defineTool<Shape extends ZodRawShape, T>(server: McpServer, client: FlowFrameClient, config: DefineToolConfig<Shape, T>): void;
44
+ export {};
@@ -0,0 +1,44 @@
1
+ /**
2
+ * `defineTool` — DRY wrapper for the FlowFrame MCP tool registration pattern.
3
+ *
4
+ * Every tool in `tools.ts` repeats the same skeleton:
5
+ *
6
+ * server.tool(name, description, inputSchema, async (args) => {
7
+ * try {
8
+ * const env = await client.get<...>(path, query);
9
+ * return formatEnvelope(title, env, body);
10
+ * } catch (err) {
11
+ * return formatError(err as FlowFrameApiError);
12
+ * }
13
+ * });
14
+ *
15
+ * `defineTool` factors out the try/catch + `formatError` boilerplate so a
16
+ * tool definition is just: input schema + `fetch(client, args)` + `format(env, args)`.
17
+ *
18
+ * Intentionally a thin helper. We do NOT take over input validation
19
+ * (zod still runs via `server.tool`), URL building (the FlowFrameClient
20
+ * already handles that), or formatting (callers still produce the
21
+ * `ToolResult` so each tool keeps its bespoke prose). The win is purely
22
+ * removing duplicated error-handling code from each tool.
23
+ */
24
+ import { formatError } from './formatter.js';
25
+ export function defineTool(server, client, config) {
26
+ // The MCP SDK's `server.tool` is heavily overloaded and TypeScript can't
27
+ // narrow our generic `Shape extends ZodRawShape` to the exact `ZodRawShape`
28
+ // shape its `BaseToolCallback` wants. The runtime contract is correct
29
+ // (zod schema in, ToolResult out), so we cast the callback to satisfy
30
+ // the picker. Don't widen this `any` — keep it scoped to the callback.
31
+ const cb = async (args) => {
32
+ try {
33
+ const env = await config.fetch(client, args);
34
+ return config.format(env, args);
35
+ }
36
+ catch (err) {
37
+ return formatError(err);
38
+ }
39
+ };
40
+ server.tool(config.name, config.description, config.inputSchema,
41
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
42
+ cb);
43
+ }
44
+ //# sourceMappingURL=defineTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defineTool.js","sourceRoot":"","sources":["../src/defineTool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,OAAO,EAAE,WAAW,EAAmB,MAAM,gBAAgB,CAAC;AAwB9D,MAAM,UAAU,UAAU,CACxB,MAAiB,EACjB,MAAuB,EACvB,MAAkC;IAElC,yEAAyE;IACzE,4EAA4E;IAC5E,sEAAsE;IACtE,sEAAsE;IACtE,uEAAuE;IACvE,MAAM,EAAE,GAAG,KAAK,EAAE,IAA6C,EAAE,EAAE;QACjE,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC7C,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAwB,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC,CAAC;IACF,MAAM,CAAC,IAAI,CACT,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,WAAW;IAClB,8DAA8D;IAC9D,EAAS,CACV,CAAC;AACJ,CAAC"}
@@ -37,4 +37,10 @@ export declare function formatError(err: FlowFrameApiError | Error): ToolResult;
37
37
  export declare function fmtPct(n: number | null | undefined, digits?: number): string;
38
38
  export declare function fmtUsd(n: number | null | undefined): string;
39
39
  export declare function fmtPrice(n: number | null | undefined): string;
40
+ /**
41
+ * Pick at most `n` items from `arr`, evenly spaced, always including the first
42
+ * and last item. Used for compressing long time-series into a digestible
43
+ * summary in tool output without truncating the chronological span.
44
+ */
45
+ export declare function sampleEvenly<T>(arr: T[], n: number): T[];
40
46
  export {};
package/dist/formatter.js CHANGED
@@ -81,4 +81,21 @@ export function fmtPrice(n) {
81
81
  // Polymarket prices are 0..1 probabilities — show as percentage.
82
82
  return `${(n * 100).toFixed(1)}%`;
83
83
  }
84
+ /**
85
+ * Pick at most `n` items from `arr`, evenly spaced, always including the first
86
+ * and last item. Used for compressing long time-series into a digestible
87
+ * summary in tool output without truncating the chronological span.
88
+ */
89
+ export function sampleEvenly(arr, n) {
90
+ if (arr.length <= n)
91
+ return arr;
92
+ if (n <= 1)
93
+ return arr.length > 0 ? [arr[arr.length - 1]] : [];
94
+ const out = [];
95
+ const step = (arr.length - 1) / (n - 1);
96
+ for (let i = 0; i < n; i++) {
97
+ out.push(arr[Math.round(i * step)]);
98
+ }
99
+ return out;
100
+ }
84
101
  //# sourceMappingURL=formatter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAmBH,MAAM,UAAU,cAAc,CAC5B,KAAa,EACb,QAAqB,EACrB,IAAY,EACZ,UAAyB,EAAE;IAE3B,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAE1C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACnC,MAAM,KAAK,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,IAAI,qBAAqB,CAAC;IACjE,MAAM,GAAG,GAAG,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,uBAAuB,CAAC;IAC/D,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,GAAG,CAAC,CAAC;IAEpC,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACvC,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5D,iBAAiB,EAAE;YACjB,IAAI,EAAE,QAAQ,CAAC,IAAe;YAC9B,IAAI,EAAE,QAAQ,CAAC,IAA0C;SAC1D;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,KAAa,EACb,IAAY,EACZ,UAAmC;IAEnC,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,GAAG,KAAK,OAAO,IAAI,CAAC,IAAI,EAAE,mDAAmD;aACpF;SACF;QACD,iBAAiB,EAAE,UAAU;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAA8B;IACxD,MAAM,MAAM,GAAG,GAAiC,CAAC;IACjD,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QACvD,iBAAiB,EAAE;YACjB,KAAK,EAAE;gBACL,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,gBAAgB;gBACrC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC;gBAC1B,GAAG,CAAC,OAAO,MAAM,CAAC,iBAAiB,KAAK,QAAQ;oBAC9C,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE;oBACjD,CAAC,CAAC,EAAE,CAAC;aACR;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,CAA4B,EAAE,MAAM,GAAG,CAAC;IAC7D,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAChE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,CAA4B;IACjD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAChE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3D,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3D,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3D,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,CAA4B;IACnD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAChE,iEAAiE;IACjE,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAI,GAAQ,EAAE,CAAS;IACjD,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC;IAChC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
package/dist/tools.js CHANGED
@@ -7,6 +7,7 @@
7
7
  * server and one Claude ignores.
8
8
  */
9
9
  import { z } from "zod";
10
+ import { defineTool } from "./defineTool.js";
10
11
  import { formatEnvelope, formatError, fmtPct, fmtPrice, fmtUsd } from "./formatter.js";
11
12
  const SPEAKER_SLUGS = [
12
13
  "donald-trump",
@@ -22,11 +23,14 @@ export function registerTools(server, client) {
22
23
  // ─────────────────────────────────────────────────────────────────────────
23
24
  // Ping — install/health check
24
25
  // ─────────────────────────────────────────────────────────────────────────
25
- server.tool("flowframe_ping", "Health check for the FlowFrame MCP server. Confirms that FLOWFRAME_API_KEY is " +
26
- "configured correctly and that the FlowFrame API is reachable. Returns the key id " +
27
- "and tier on success. Use this first if any other FlowFrame tool is failing.", {}, async () => {
28
- try {
29
- const env = await client.get("/_ping");
26
+ defineTool(server, client, {
27
+ name: "flowframe_ping",
28
+ description: "Health check for the FlowFrame MCP server. Confirms that FLOWFRAME_API_KEY is " +
29
+ "configured correctly and that the FlowFrame API is reachable. Returns the key id " +
30
+ "and tier on success. Use this first if any other FlowFrame tool is failing.",
31
+ inputSchema: {},
32
+ fetch: (c) => c.get("/_ping"),
33
+ format: (env) => {
30
34
  const d = env.data;
31
35
  const body = [
32
36
  `OK — FlowFrame API is reachable.`,
@@ -34,38 +38,38 @@ export function registerTools(server, client) {
34
38
  `Tier: ${d.tier}`,
35
39
  ].join("\n");
36
40
  return formatEnvelope("FlowFrame ping:", env, body);
37
- }
38
- catch (err) {
39
- return formatError(err);
40
- }
41
+ },
41
42
  });
42
43
  // ─────────────────────────────────────────────────────────────────────────
43
44
  // Pulse — FlowFrame's own market analysis feed
44
45
  // ─────────────────────────────────────────────────────────────────────────
45
- server.tool("flowframe_list_pulse", "List recent FlowFrame Pulse items — short-form analysis written by FlowFrame about " +
46
- "specific Polymarket and Kalshi markets. Use when the user asks 'what's new on FlowFrame', " +
47
- "'what is FlowFrame saying about prediction markets lately', or wants original analysis " +
48
- "rather than raw market data. Returns title, source, publish date, content, the underlying " +
49
- "Polymarket conditionId (if any), and a permalink. Sorted newest first. " +
50
- "Do NOT use for market price data use flowframe_polymarket_movers for that.", {
51
- limit: z
52
- .number()
53
- .int()
54
- .min(1)
55
- .max(50)
56
- .optional()
57
- .describe("Number of items to return (default 10, max 50)."),
58
- source: z
59
- .string()
60
- .optional()
61
- .describe("Filter by source name (e.g., 'Polymarket', 'Kalshi'). Optional."),
62
- since: z
63
- .string()
64
- .optional()
65
- .describe("ISO 8601 timestamp; only return items published after this time."),
66
- }, async ({ limit, source, since }) => {
67
- try {
68
- const env = await client.get("/pulse", { limit: limit ?? 10, source, since });
46
+ defineTool(server, client, {
47
+ name: "flowframe_list_pulse",
48
+ description: "List recent FlowFrame Pulse items short-form analysis written by FlowFrame about " +
49
+ "specific Polymarket and Kalshi markets. Use when the user asks 'what's new on FlowFrame', " +
50
+ "'what is FlowFrame saying about prediction markets lately', or wants original analysis " +
51
+ "rather than raw market data. Returns title, source, publish date, content, the underlying " +
52
+ "Polymarket conditionId (if any), and a permalink. Sorted newest first. " +
53
+ "Do NOT use for market price data — use flowframe_polymarket_movers for that.",
54
+ inputSchema: {
55
+ limit: z
56
+ .number()
57
+ .int()
58
+ .min(1)
59
+ .max(50)
60
+ .optional()
61
+ .describe("Number of items to return (default 10, max 50)."),
62
+ source: z
63
+ .string()
64
+ .optional()
65
+ .describe("Filter by source name (e.g., 'Polymarket', 'Kalshi'). Optional."),
66
+ since: z
67
+ .string()
68
+ .optional()
69
+ .describe("ISO 8601 timestamp; only return items published after this time."),
70
+ },
71
+ fetch: (c, { limit, source, since }) => c.get("/pulse", { limit: limit ?? 10, source, since }),
72
+ format: (env) => {
69
73
  if (env.data.length === 0) {
70
74
  return formatEnvelope("No FlowFrame Pulse items match those filters.", env, "");
71
75
  }
@@ -82,22 +86,22 @@ export function registerTools(server, client) {
82
86
  })
83
87
  .join("\n\n");
84
88
  return formatEnvelope(`FlowFrame Pulse — ${env.data.length} most recent item(s):`, env, body);
85
- }
86
- catch (err) {
87
- return formatError(err);
88
- }
89
+ },
89
90
  });
90
- server.tool("flowframe_get_pulse_item", "Fetch a single FlowFrame Pulse item by its slug or uuid. Use after flowframe_list_pulse " +
91
- "when the user says 'open that one', 'show me the full text', or 'summarize the second " +
92
- "item' the slug from the list result goes here. Returns the full content (not truncated), " +
93
- "title, source, publish date, conditionId, and permalink.", {
94
- identifier: z
95
- .string()
96
- .min(1)
97
- .describe("The Pulse item slug (preferred — looks like 'trump-china-tariff-2026-04-01') or its uuid."),
98
- }, async ({ identifier }) => {
99
- try {
100
- const env = await client.get(`/pulse/${encodeURIComponent(identifier)}`);
91
+ defineTool(server, client, {
92
+ name: "flowframe_get_pulse_item",
93
+ description: "Fetch a single FlowFrame Pulse item by its slug or uuid. Use after flowframe_list_pulse " +
94
+ "when the user says 'open that one', 'show me the full text', or 'summarize the second " +
95
+ "item' — the slug from the list result goes here. Returns the full content (not truncated), " +
96
+ "title, source, publish date, conditionId, and permalink.",
97
+ inputSchema: {
98
+ identifier: z
99
+ .string()
100
+ .min(1)
101
+ .describe("The Pulse item slug (preferred — looks like 'trump-china-tariff-2026-04-01') or its uuid."),
102
+ },
103
+ fetch: (c, { identifier }) => c.get(`/pulse/${encodeURIComponent(identifier)}`),
104
+ format: (env) => {
101
105
  const item = env.data;
102
106
  const date = new Date(item.publishedAt).toISOString().slice(0, 10);
103
107
  const body = [
@@ -108,23 +112,23 @@ export function registerTools(server, client) {
108
112
  (item.content ?? "").trim(),
109
113
  ].join("\n");
110
114
  return formatEnvelope("FlowFrame Pulse item:", env, body);
111
- }
112
- catch (err) {
113
- return formatError(err);
114
- }
115
+ },
115
116
  });
116
- server.tool("flowframe_get_pulse_for_market", "Get all FlowFrame Pulse items written about a specific Polymarket market, identified by " +
117
- "its conditionId (a 0x-prefixed hex string from polymarket.com URLs or any Polymarket API). " +
118
- "Use when the user references a specific market and asks 'what does FlowFrame say about this'. " +
119
- "Returns up to 100 items, newest first. Returns an empty list if FlowFrame hasn't covered " +
120
- "that market or if it's a Kalshi-only market (Kalshi markets aren't matched by conditionId).", {
121
- conditionId: z
122
- .string()
123
- .min(3)
124
- .describe("Polymarket conditionId, e.g. '0x1234...'. Required."),
125
- }, async ({ conditionId }) => {
126
- try {
127
- const env = await client.get(`/pulse/by-market/${encodeURIComponent(conditionId)}`);
117
+ defineTool(server, client, {
118
+ name: "flowframe_get_pulse_for_market",
119
+ description: "Get all FlowFrame Pulse items written about a specific Polymarket market, identified by " +
120
+ "its conditionId (a 0x-prefixed hex string from polymarket.com URLs or any Polymarket API). " +
121
+ "Use when the user references a specific market and asks 'what does FlowFrame say about this'. " +
122
+ "Returns up to 100 items, newest first. Returns an empty list if FlowFrame hasn't covered " +
123
+ "that market or if it's a Kalshi-only market (Kalshi markets aren't matched by conditionId).",
124
+ inputSchema: {
125
+ conditionId: z
126
+ .string()
127
+ .min(3)
128
+ .describe("Polymarket conditionId, e.g. '0x1234...'. Required."),
129
+ },
130
+ fetch: (c, { conditionId }) => c.get(`/pulse/by-market/${encodeURIComponent(conditionId)}`),
131
+ format: (env, { conditionId }) => {
128
132
  if (env.data.length === 0) {
129
133
  return formatEnvelope(`No FlowFrame Pulse coverage for market ${conditionId}.`, env, "");
130
134
  }
@@ -136,35 +140,35 @@ export function registerTools(server, client) {
136
140
  })
137
141
  .join("\n\n");
138
142
  return formatEnvelope(`FlowFrame Pulse coverage for market ${conditionId} (${env.data.length} item(s)):`, env, body);
139
- }
140
- catch (err) {
141
- return formatError(err);
142
- }
143
+ },
143
144
  });
144
145
  // ─────────────────────────────────────────────────────────────────────────
145
146
  // Movers — Polymarket / Kalshi
146
147
  // ─────────────────────────────────────────────────────────────────────────
147
- server.tool("flowframe_polymarket_movers", "Top Polymarket markets by recent price change. Use when the user asks 'what's moving on " +
148
- "Polymarket', 'biggest movers in the last X hours', or wants to find markets where " +
149
- "consensus has shifted. Returns market title, current price, price at start of window, " +
150
- "delta in percentage points, 24h volume, and the polymarket.com URL. Sorted by " +
151
- "abs(delta) descending.", {
152
- window: WindowEnum.optional().describe("Lookback window: 1h, 4h, 12h, or 24h. Default 24h."),
153
- direction: DirectionEnum.optional().describe("'up' = only markets that moved up, 'down' = only down, 'both' = either direction (default)."),
154
- limit: z
155
- .number()
156
- .int()
157
- .min(1)
158
- .max(50)
159
- .optional()
160
- .describe("Number of markets to return (default 10, max 50)."),
161
- }, async ({ window, direction, limit }) => {
162
- try {
163
- const env = await client.get("/movers/polymarket", {
164
- window: window ?? "24h",
165
- direction: direction ?? "both",
166
- limit: limit ?? 10,
167
- });
148
+ defineTool(server, client, {
149
+ name: "flowframe_polymarket_movers",
150
+ description: "Top Polymarket markets by recent price change. Use when the user asks 'what's moving on " +
151
+ "Polymarket', 'biggest movers in the last X hours', or wants to find markets where " +
152
+ "consensus has shifted. Returns market title, current price, price at start of window, " +
153
+ "delta in percentage points, 24h volume, and the polymarket.com URL. Sorted by " +
154
+ "abs(delta) descending.",
155
+ inputSchema: {
156
+ window: WindowEnum.optional().describe("Lookback window: 1h, 4h, 12h, or 24h. Default 24h."),
157
+ direction: DirectionEnum.optional().describe("'up' = only markets that moved up, 'down' = only down, 'both' = either direction (default)."),
158
+ limit: z
159
+ .number()
160
+ .int()
161
+ .min(1)
162
+ .max(50)
163
+ .optional()
164
+ .describe("Number of markets to return (default 10, max 50)."),
165
+ },
166
+ fetch: (c, { window, direction, limit }) => c.get("/movers/polymarket", {
167
+ window: window ?? "24h",
168
+ direction: direction ?? "both",
169
+ limit: limit ?? 10,
170
+ }),
171
+ format: (env, { window }) => {
168
172
  if (env.data.length === 0) {
169
173
  return formatEnvelope("No Polymarket movers match those filters.", env, "");
170
174
  }
@@ -178,10 +182,7 @@ export function registerTools(server, client) {
178
182
  })
179
183
  .join("\n\n");
180
184
  return formatEnvelope(`Top ${env.data.length} Polymarket movers (${env.meta.window ?? window ?? "24h"} window):`, env, body);
181
- }
182
- catch (err) {
183
- return formatError(err);
184
- }
185
+ },
185
186
  });
186
187
  server.tool("flowframe_kalshi_movers", "Top Kalshi markets by recent price change. Use when the user asks 'what's moving on " +
187
188
  "Kalshi'. Returns market title, current price, delta, volume, and Kalshi URL. " +
@@ -221,30 +222,33 @@ export function registerTools(server, client) {
221
222
  // ─────────────────────────────────────────────────────────────────────────
222
223
  // Smart Money Skew
223
224
  // ─────────────────────────────────────────────────────────────────────────
224
- server.tool("flowframe_smart_money_skew", "Find Polymarket markets where the top 30 most-profitable traders (last 30d, ranked by P&L " +
225
- "from predicting.top) are positioned disproportionately on one side compared to the market " +
226
- "price. Use this to find markets where 'smart money' disagrees with the consensus. " +
227
- "Returns: market title, current market price, smart-money implied fair value, edge (in " +
228
- "percentage points), composite skew score, and per-tier dollar positions (Sharp = top 10, " +
229
- "Profitable = 11-20, Recreational = 21-30). Sorted by composite score descending. " +
230
- "For a single market's full breakdown by conditionId, use flowframe_smart_money_skew_for_market.", {
231
- limit: z
232
- .number()
233
- .int()
234
- .min(1)
235
- .max(50)
236
- .optional()
237
- .describe("Number of markets to return (default 10, max 50)."),
238
- minScore: z
239
- .number()
240
- .optional()
241
- .describe("Filter to markets with composite skew score ≥ this value. Optional."),
242
- }, async ({ limit, minScore }) => {
243
- try {
244
- const env = await client.get("/smart-money/skew", {
245
- limit: limit ?? 10,
246
- minScore,
247
- });
225
+ defineTool(server, client, {
226
+ name: "flowframe_smart_money_skew",
227
+ description: "Find Polymarket markets where the top 30 most-profitable traders (last 30d, ranked by P&L " +
228
+ "from predicting.top) are positioned disproportionately on one side compared to the market " +
229
+ "price. Use this to find markets where 'smart money' disagrees with the consensus. " +
230
+ "Returns: market title, current market price, smart-money implied fair value, edge (in " +
231
+ "percentage points), composite skew score, and per-tier dollar positions (Sharp = top 10, " +
232
+ "Profitable = 11-20, Recreational = 21-30). Sorted by composite score descending. " +
233
+ "For a single market's full breakdown by conditionId, use flowframe_smart_money_skew_for_market.",
234
+ inputSchema: {
235
+ limit: z
236
+ .number()
237
+ .int()
238
+ .min(1)
239
+ .max(50)
240
+ .optional()
241
+ .describe("Number of markets to return (default 10, max 50)."),
242
+ minScore: z
243
+ .number()
244
+ .optional()
245
+ .describe("Filter to markets with composite skew score ≥ this value. Optional."),
246
+ },
247
+ fetch: (c, { limit, minScore }) => c.get("/smart-money/skew", {
248
+ limit: limit ?? 10,
249
+ minScore,
250
+ }),
251
+ format: (env) => {
248
252
  if (env.data.length === 0) {
249
253
  return formatEnvelope("No smart-money skew signals match those filters.", env, "");
250
254
  }
@@ -258,19 +262,19 @@ export function registerTools(server, client) {
258
262
  })
259
263
  .join("\n\n");
260
264
  return formatEnvelope(`Top ${env.data.length} smart-money skew signal(s):`, env, body);
261
- }
262
- catch (err) {
263
- return formatError(err);
264
- }
265
+ },
265
266
  });
266
- server.tool("flowframe_smart_money_skew_for_market", "Get the full smart-money skew breakdown for a single Polymarket market by conditionId, " +
267
- "including per-tier (Sharp / Profitable / Recreational) dollar positions and which side " +
268
- "each tier is on. Use after flowframe_smart_money_skew when the user wants to drill into " +
269
- "one specific market.", {
270
- conditionId: z.string().min(3).describe("Polymarket conditionId. Required."),
271
- }, async ({ conditionId }) => {
272
- try {
273
- const env = await client.get(`/smart-money/skew/${encodeURIComponent(conditionId)}`);
267
+ defineTool(server, client, {
268
+ name: "flowframe_smart_money_skew_for_market",
269
+ description: "Get the full smart-money skew breakdown for a single Polymarket market by conditionId, " +
270
+ "including per-tier (Sharp / Profitable / Recreational) dollar positions and which side " +
271
+ "each tier is on. Use after flowframe_smart_money_skew when the user wants to drill into " +
272
+ "one specific market.",
273
+ inputSchema: {
274
+ conditionId: z.string().min(3).describe("Polymarket conditionId. Required."),
275
+ },
276
+ fetch: (c, { conditionId }) => c.get(`/smart-money/skew/${encodeURIComponent(conditionId)}`),
277
+ format: (env) => {
274
278
  const m = env.data;
275
279
  const tiers = m.tiers ?? {};
276
280
  const tierLine = (name, t) => {
@@ -300,10 +304,7 @@ export function registerTools(server, client) {
300
304
  .filter(Boolean)
301
305
  .join("\n");
302
306
  return formatEnvelope("Smart-money skew detail:", env, body);
303
- }
304
- catch (err) {
305
- return formatError(err);
306
- }
307
+ },
307
308
  });
308
309
  // ─────────────────────────────────────────────────────────────────────────
309
310
  // Mentions Hub — political speech transcripts
@@ -334,8 +335,9 @@ export function registerTools(server, client) {
334
335
  "context. Use when the user asks 'when did X talk about Y', 'has Powell mentioned tariffs', " +
335
336
  "or wants verbatim quotes. Each result includes the transcript title, date, source, event " +
336
337
  "format (rally / press conference / interview / etc.), the number of times the keyword " +
337
- "appears in that transcript, and up to several snippets. Call flowframe_list_speakers first " +
338
- "if you don't know the available speaker slugs.", {
338
+ "appears in that transcript, and every keyword snippet from that transcript (no per-result " +
339
+ "snippet cap — if a rally has 12 hits, you get all 12 quoted). Call flowframe_list_speakers " +
340
+ "first if you don't know the available speaker slugs.", {
339
341
  q: z
340
342
  .string()
341
343
  .min(2)
@@ -361,8 +363,13 @@ export function registerTools(server, client) {
361
363
  }
362
364
  const body = env.data
363
365
  .map((r, i) => {
366
+ // Render every snippet the API returned. Previously capped at 3
367
+ // (May 2026), which silently dropped quotes when a single
368
+ // transcript contained many hits — e.g. a rally where the
369
+ // speaker said the keyword 12 times only surfaced 3 of them.
370
+ // Snippet count is already bounded server-side per transcript,
371
+ // and the API caps `limit` at 50 transcripts.
364
372
  const snippets = (r.snippets ?? [])
365
- .slice(0, 3)
366
373
  .map((s) => ` "${s.trim()}"`)
367
374
  .join("\n");
368
375
  return [
@@ -382,6 +389,163 @@ export function registerTools(server, client) {
382
389
  return formatError(err);
383
390
  }
384
391
  });
392
+ // ─────────────────────────────────────────────────────────────────────────
393
+ // Polymarket microstructure snapshot history
394
+ // ─────────────────────────────────────────────────────────────────────────
395
+ const SnapshotIntervalEnum = z.enum(["30m", "1h", "4h", "1d"]);
396
+ server.tool("flowframe_polymarket_snapshot_history", "[FlowFrame Pro — upgrade at https://flowframe.xyz/pro] " +
397
+ "Historical Polymarket microstructure for a single market: per-snapshot YES/NO price, " +
398
+ "best bid/ask, spread percent, 24h volume, per-hour volume rate, cumulative volume, " +
399
+ "and liquidity. Underlying snapshots are taken every 30 minutes by FlowFrame; pick a " +
400
+ "wider interval (1h/4h/1d) to downsample. Use when the user asks 'how has liquidity " +
401
+ "evolved', 'when did the spread blow out', 'show me the price + volume history', or " +
402
+ "wants any time-series view of a specific Polymarket conditionId. Returns 404 if " +
403
+ "FlowFrame is not currently tracking that market. " +
404
+ "Requires FlowFrame Pro or API Starter — free-tier API keys will get a 402 response.", {
405
+ conditionId: z
406
+ .string()
407
+ .min(3)
408
+ .max(255)
409
+ .describe("Polymarket conditionId (the long 0x... hex string). Get this from flowframe_polymarket_movers or flowframe_list_pulse."),
410
+ interval: SnapshotIntervalEnum
411
+ .optional()
412
+ .describe("Bucket size. Default '1h'. Use '30m' for max resolution, '1d' for long-term trends."),
413
+ limit: z
414
+ .number()
415
+ .int()
416
+ .min(1)
417
+ .max(500)
418
+ .optional()
419
+ .describe("Max bucketed points to return (default 200, max 500). Returns the most recent N buckets."),
420
+ since: z
421
+ .string()
422
+ .optional()
423
+ .describe("ISO 8601 timestamp; only snapshots at or after this time."),
424
+ }, async ({ conditionId, interval, limit, since }) => {
425
+ try {
426
+ const env = await client.get(`/markets/${encodeURIComponent(conditionId)}/snapshot-history`, {
427
+ interval: interval ?? "1h",
428
+ limit,
429
+ since,
430
+ });
431
+ const meta = env.meta;
432
+ if (env.data.length === 0) {
433
+ return formatEnvelope(`No snapshot history available for ${conditionId}.`, env, "");
434
+ }
435
+ // Render the full series in the text body so LLM clients that
436
+ // don't surface structuredContent (most of them, in practice) can
437
+ // do real correlation analysis. The user already chose interval
438
+ // + limit + since, which bound the result size; we shouldn't
439
+ // second-guess them by sub-sampling on top of that. The API
440
+ // hard-caps `limit` at 500, so worst case is ~500 rows ≈ 40KB
441
+ // ≈ 10K tokens — fine for any modern context window.
442
+ const body = env.data
443
+ .map((p) => ` ${p.timestamp.slice(0, 16).replace("T", " ")} ` +
444
+ `yes=${fmtPrice(p.yesPrice)} ` +
445
+ `spread=${p.spreadPercent === null ? "—" : `${p.spreadPercent.toFixed(2)}%`} ` +
446
+ `vol24h=${fmtUsd(p.volume24h)} ` +
447
+ `liq=${fmtUsd(p.liquidity)}`)
448
+ .join("\n");
449
+ const title = meta.title ? ` — ${meta.title}` : "";
450
+ const summary = `Snapshot history for ${conditionId}${title}\n` +
451
+ `Interval: ${meta.interval} | Points: ${meta.count} | ` +
452
+ `${(meta.firstAt ?? "").slice(0, 10)} → ${(meta.lastAt ?? "").slice(0, 10)}` +
453
+ (meta.polymarketUrl ? `\n${meta.polymarketUrl}` : "") +
454
+ `\n\nAll ${env.data.length} points:`;
455
+ return formatEnvelope(summary, env, body);
456
+ }
457
+ catch (err) {
458
+ return formatError(err);
459
+ }
460
+ });
461
+ // ─────────────────────────────────────────────────────────────────────────
462
+ // Cross-venue: Polymarket × Hyperliquid joined time series
463
+ // ─────────────────────────────────────────────────────────────────────────
464
+ server.tool("flowframe_cross_venue", "[FlowFrame Pro — upgrade at https://flowframe.xyz/pro] " +
465
+ "Joined Polymarket × Hyperliquid time series. Pairs a prediction-market's price/spread/volume " +
466
+ "with the Hyperliquid perp(s) for the underlying asset(s), bucket-aligned on the 30-minute " +
467
+ "snapshot schedule that FlowFrame runs against both venues. Rows are anchored on Polymarket " +
468
+ "buckets; if a Hyperliquid snapshot is missing for a bucket, that symbol is simply absent " +
469
+ "from that row's `hyperliquid` map. Use when the user asks 'how does this prediction market " +
470
+ "track BTC', 'is the perp funding consistent with the Polymarket implied probability', " +
471
+ "'show me the prediction market vs the underlying side-by-side', or any cross-venue question. " +
472
+ "FlowFrame auto-detects symbols from the market title for the curated crypto set " +
473
+ "(BTC, ETH, SOL, HYPE) — for equities/FX/commodities, pass an explicit `symbols` argument " +
474
+ "(e.g. 'xyz:AAPL', 'xyz:GOLD'). Returns 404 if FlowFrame isn't tracking the market, or " +
475
+ "400 if no symbol can be auto-detected and none was supplied. " +
476
+ "Requires FlowFrame Pro or API Starter — free-tier API keys will get a 402 response.", {
477
+ conditionId: z
478
+ .string()
479
+ .min(3)
480
+ .max(255)
481
+ .describe("Polymarket conditionId."),
482
+ symbols: z
483
+ .string()
484
+ .optional()
485
+ .describe("Comma-separated Hyperliquid symbols, max 8. Curated crypto: 'BTC', 'ETH', 'SOL', 'HYPE'. " +
486
+ "xyz builder dex: 'xyz:AAPL', 'xyz:GOLD', etc. Omit to auto-detect from the market title."),
487
+ interval: SnapshotIntervalEnum
488
+ .optional()
489
+ .describe("Bucket size. Default '1h'."),
490
+ days: z
491
+ .number()
492
+ .int()
493
+ .min(1)
494
+ .max(30)
495
+ .optional()
496
+ .describe("Trailing window 1-30. Default 7."),
497
+ }, async ({ conditionId, symbols, interval, days }) => {
498
+ try {
499
+ const env = await client.get(`/cross-venue/${encodeURIComponent(conditionId)}`, {
500
+ symbols,
501
+ interval: interval ?? "1h",
502
+ days: days ?? 7,
503
+ });
504
+ const meta = env.meta;
505
+ if (env.data.length === 0) {
506
+ return formatEnvelope(`No cross-venue series available for ${conditionId}.`, env, "");
507
+ }
508
+ const symList = meta.symbols ?? [];
509
+ // Render the full series in the text body — same reasoning as
510
+ // snapshot_history above. The user picked `days` (1-30) and
511
+ // `interval` deliberately; sub-sampling on top of that strips
512
+ // away the intraday extremes that matter for funding-rate
513
+ // correlation analysis. Worst case (30d × 30m ≈ 1440 rows × 2
514
+ // lines) ≈ 60K tokens — fine for any current context window.
515
+ // If they want it smaller, they can shrink `days` or use a
516
+ // wider `interval`. Full series also remains in
517
+ // structuredContent.data.
518
+ const body = env.data
519
+ .map((p) => {
520
+ const pm = p.polymarket ?? {};
521
+ const hlPart = symList
522
+ .map((s) => {
523
+ const h = p.hyperliquid?.[s];
524
+ if (!h)
525
+ return `${s}=—`;
526
+ const fr = h.fundingRate === null || h.fundingRate === undefined
527
+ ? "—"
528
+ : `fund=${(h.fundingRate * 100).toFixed(4)}%`;
529
+ return `${s} px=${h.oraclePrice ?? "—"} ${fr}`;
530
+ })
531
+ .join(" | ");
532
+ return (` ${p.timestamp.slice(0, 16).replace("T", " ")} ` +
533
+ `pm yes=${fmtPrice(pm.yesPrice)} spr=${pm.spreadPercent === null ? "—" : `${pm.spreadPercent.toFixed(2)}%`}\n` +
534
+ ` ${hlPart}`);
535
+ })
536
+ .join("\n");
537
+ const title = meta.title ? ` — ${meta.title}` : "";
538
+ const summary = `Cross-venue series for ${conditionId}${title}\n` +
539
+ `Symbols: ${symList.join(", ")}${meta.symbolsAutoDetected ? " (auto-detected)" : ""} | ` +
540
+ `Interval: ${meta.interval} | Days: ${meta.days} | Points: ${meta.count}` +
541
+ (meta.polymarketUrl ? `\n${meta.polymarketUrl}` : "") +
542
+ `\n\nAll ${env.data.length} points:`;
543
+ return formatEnvelope(summary, env, body);
544
+ }
545
+ catch (err) {
546
+ return formatError(err);
547
+ }
548
+ });
385
549
  server.tool("flowframe_mention_frequency", "Time-series of how often a keyword appears in a speaker's transcripts, grouped by day, " +
386
550
  "week, month, or year. Use when the user asks 'how often does X mention Y over time', " +
387
551
  "'is Trump talking about China more lately', etc. Returns periods with mention counts and " +
@@ -414,5 +578,191 @@ export function registerTools(server, client) {
414
578
  return formatError(err);
415
579
  }
416
580
  });
581
+ // ─────────────────────────────────────────────────────────────────────────
582
+ // Volume-velocity breakout signal (paid)
583
+ // ─────────────────────────────────────────────────────────────────────────
584
+ server.tool("flowframe_breakout_signal", "[FlowFrame Pro — upgrade at https://flowframe.xyz/pro] " +
585
+ "Polymarket markets ranked by volume velocity — markets where 24h volume is large " +
586
+ "relative to all-time volume, i.e. catching fire right now. Tiers: 'breaking' (>6%), " +
587
+ "'trending' (3-6%), 'heating-up' (1-3%). Use when the user asks 'what's catching fire', " +
588
+ "'what's breaking out', 'where is unusual activity', or wants early signals before a " +
589
+ "market shows up in the standard movers feed. Excludes already-resolved markets " +
590
+ "(>95% / <5%), evergreen BTC/ETH price markets, and 2028 presidential markets to keep " +
591
+ "the signal clean. " +
592
+ "Requires FlowFrame Pro or API Starter — free-tier API keys will get a 402 response.", {
593
+ limit: z
594
+ .number()
595
+ .int()
596
+ .min(1)
597
+ .max(100)
598
+ .optional()
599
+ .describe("Max markets to return (1-100, default 25)."),
600
+ minVelocityPercent: z
601
+ .number()
602
+ .min(0)
603
+ .max(100)
604
+ .optional()
605
+ .describe("Minimum velocity (24h vol / total vol × 100). Default 1. Raise to 3+ to filter for trending/breaking only."),
606
+ minVolume24h: z
607
+ .number()
608
+ .min(0)
609
+ .optional()
610
+ .describe("Minimum 24h USDC volume floor. Default 10000."),
611
+ }, async ({ limit, minVelocityPercent, minVolume24h }) => {
612
+ try {
613
+ const env = await client.get("/signals/breakout", {
614
+ limit: limit ?? 25,
615
+ minVelocityPercent: minVelocityPercent ?? 1,
616
+ minVolume24h: minVolume24h ?? 10000,
617
+ });
618
+ if (env.data.length === 0) {
619
+ return formatEnvelope("No markets match those breakout filters.", env, "");
620
+ }
621
+ const body = env.data
622
+ .map((m, i) => {
623
+ const tierTag = m.tier ? `[${m.tier}]` : "";
624
+ const yesPart = m.currentYesPrice == null ? "" : ` yes=${fmtPrice(m.currentYesPrice)}`;
625
+ const chgPart = m.priceChange24hYes == null ? "" : ` Δ24h=${fmtPct(m.priceChange24hYes)}`;
626
+ return [
627
+ `${i + 1}. ${tierTag} velocity=${m.velocityPercent.toFixed(2)}% vol24h=${fmtUsd(m.volume24h)} / total=${fmtUsd(m.volumeTotal)}`,
628
+ ` ${m.marketTitle ?? "(untitled)"}${yesPart}${chgPart}`,
629
+ ` ${m.polymarketUrl ?? ""}`,
630
+ ].join("\n");
631
+ })
632
+ .join("\n\n");
633
+ const meta = env.meta;
634
+ return formatEnvelope(`${env.data.length} breakout markets (>=${meta.minVelocityPercent}% velocity, >=${fmtUsd(meta.minVolume24h)} vol24h):`, env, body);
635
+ }
636
+ catch (err) {
637
+ return formatError(err);
638
+ }
639
+ });
640
+ // ─────────────────────────────────────────────────────────────────────────
641
+ // Spread-widening fragility signal (paid)
642
+ // ─────────────────────────────────────────────────────────────────────────
643
+ server.tool("flowframe_spread_widening_signal", "[FlowFrame Pro — upgrade at https://flowframe.xyz/pro] " +
644
+ "Polymarket markets whose current bid-ask spread is at least N× their 7-day baseline — " +
645
+ "a pre-move fragility precursor. Widening spreads often lead price (market makers pull " +
646
+ "quotes when they think they're about to be picked off). Use when the user asks 'what's " +
647
+ "about to move', 'what's getting fragile', 'where is liquidity drying up', or wants " +
648
+ "leading indicators rather than lagging movers. " +
649
+ "Requires FlowFrame Pro or API Starter — free-tier API keys will get a 402 response.", {
650
+ limit: z
651
+ .number()
652
+ .int()
653
+ .min(1)
654
+ .max(100)
655
+ .optional()
656
+ .describe("Max markets to return (1-100, default 25)."),
657
+ minRatio: z
658
+ .number()
659
+ .min(1.05)
660
+ .optional()
661
+ .describe("Minimum widening ratio (current / baseline). Default 1.5. Raise to 2-3 for the most extreme cases."),
662
+ min24hVolume: z
663
+ .number()
664
+ .min(0)
665
+ .optional()
666
+ .describe("Minimum 24h USDC volume floor. Default 5000."),
667
+ minLiquidity: z
668
+ .number()
669
+ .min(0)
670
+ .optional()
671
+ .describe("Minimum on-book liquidity floor. Default 2000."),
672
+ }, async ({ limit, minRatio, min24hVolume, minLiquidity }) => {
673
+ try {
674
+ const env = await client.get("/signals/spread-widening", {
675
+ limit: limit ?? 25,
676
+ minRatio: minRatio ?? 1.5,
677
+ min24hVolume: min24hVolume ?? 5000,
678
+ minLiquidity: minLiquidity ?? 2000,
679
+ });
680
+ if (env.data.length === 0) {
681
+ return formatEnvelope("No markets match those spread-widening filters.", env, "");
682
+ }
683
+ const body = env.data
684
+ .map((m, i) => {
685
+ return [
686
+ `${i + 1}. ratio=${m.wideningRatio.toFixed(2)}× — current ${m.currentSpreadPercent.toFixed(2)}% vs 7d baseline ${m.baselineSpreadPercent.toFixed(2)}%`,
687
+ ` ${m.marketTitle ?? "(untitled)"} yes=${fmtPrice(m.yesPrice)} vol24h=${fmtUsd(m.volume24h)} liq=${fmtUsd(m.liquidity)}`,
688
+ ` ${m.polymarketUrl ?? ""}`,
689
+ ].join("\n");
690
+ })
691
+ .join("\n\n");
692
+ const meta = env.meta;
693
+ return formatEnvelope(`${env.data.length} markets with spread ≥${meta.minRatio}× their 7d baseline:`, env, body);
694
+ }
695
+ catch (err) {
696
+ return formatError(err);
697
+ }
698
+ });
699
+ // ─────────────────────────────────────────────────────────────────────────
700
+ // Recent large trades from FlowFrame's tracked top-trader wallets
701
+ // ─────────────────────────────────────────────────────────────────────────
702
+ server.tool("flowframe_recent_whale_trades", "Live feed of recent large trades from FlowFrame's tracked top-trader wallets on Polymarket, " +
703
+ "sorted newest-first. This is a raw fill stream — one row per executed trade, not aggregated " +
704
+ "accumulations. Use when the user asks 'what are the whales doing right now', 'show me recent " +
705
+ "smart-money activity', 'who's buying what on Polymarket', or wants to see live large-size " +
706
+ "executions. Each row includes the trader's wallet, market title + conditionId, outcome, side " +
707
+ "(BUY/SELL), execution price, share count, USDC notional, transaction hash, and links to the " +
708
+ "trader's Polymarket profile and the market.", {
709
+ minSize: z
710
+ .number()
711
+ .min(0)
712
+ .max(10_000_000)
713
+ .optional()
714
+ .describe("Minimum USDC notional per trade (default 1000, max 10000000). Raise this to filter for bigger whales."),
715
+ side: z
716
+ .enum(["BUY", "SELL"])
717
+ .optional()
718
+ .describe("Filter to only buys or only sells. Omit for both."),
719
+ since: z
720
+ .string()
721
+ .optional()
722
+ .describe("ISO 8601 timestamp; only trades at or after this time."),
723
+ limit: z
724
+ .number()
725
+ .int()
726
+ .min(1)
727
+ .max(100)
728
+ .optional()
729
+ .describe("Max trades to return (1-100, default 25)."),
730
+ }, async ({ minSize, side, since, limit }) => {
731
+ try {
732
+ const env = await client.get("/trades/recent", {
733
+ minSize: minSize ?? 1000,
734
+ side,
735
+ since,
736
+ limit: limit ?? 25,
737
+ });
738
+ if (env.data.length === 0) {
739
+ return formatEnvelope("No recent trades match those filters.", env, "");
740
+ }
741
+ const body = env.data
742
+ .map((t, i) => {
743
+ const arrow = t.side === "BUY" ? "↑" : "↓";
744
+ const ts = (t.timestamp ?? "").slice(0, 16).replace("T", " ");
745
+ return [
746
+ `${i + 1}. ${arrow} ${t.side} ${t.outcome ?? ""} — ${fmtUsd(t.usdcSize)} @ ${fmtPrice(t.price)}`,
747
+ ` ${t.marketTitle ?? "(untitled)"} (${ts} UTC)`,
748
+ ` Wallet: ${t.wallet}`,
749
+ ` ${t.polymarketMarketUrl ?? ""}`,
750
+ ].join("\n");
751
+ })
752
+ .join("\n\n");
753
+ const meta = env.meta;
754
+ const filterBits = [];
755
+ if (meta.minSize)
756
+ filterBits.push(`>= ${fmtUsd(meta.minSize)}`);
757
+ if (meta.side)
758
+ filterBits.push(meta.side);
759
+ if (meta.since)
760
+ filterBits.push(`since ${meta.since.slice(0, 16).replace("T", " ")}`);
761
+ return formatEnvelope(`${env.data.length} recent trades${filterBits.length ? ` (${filterBits.join(", ")})` : ""}:`, env, body);
762
+ }
763
+ catch (err) {
764
+ return formatError(err);
765
+ }
766
+ });
417
767
  }
418
768
  //# sourceMappingURL=tools.js.map
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowframe22/mcp-server",
3
- "version": "0.1.0",
3
+ "version": "0.2.3",
4
4
  "description": "Model Context Protocol server for FlowFrame — bring prediction-market intelligence (Polymarket movers, smart-money skew, FlowFrame Pulse, political mentions) into Claude and any MCP-compatible client.",
5
5
  "license": "MIT",
6
6
  "type": "module",