@cyanheads/secedgar-mcp-server 0.4.5 → 0.5.0
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/README.md +28 -9
- package/dist/config/server-config.d.ts +2 -0
- package/dist/config/server-config.d.ts.map +1 -1
- package/dist/config/server-config.js +13 -0
- package/dist/config/server-config.js.map +1 -1
- package/dist/index.js +22 -4
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/tools/definitions/dataframe-describe.tool.d.ts +33 -0
- package/dist/mcp-server/tools/definitions/dataframe-describe.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/dataframe-describe.tool.js +114 -0
- package/dist/mcp-server/tools/definitions/dataframe-describe.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/dataframe-drop.tool.d.ts +20 -0
- package/dist/mcp-server/tools/definitions/dataframe-drop.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/dataframe-drop.tool.js +48 -0
- package/dist/mcp-server/tools/definitions/dataframe-drop.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/dataframe-query.tool.d.ts +29 -0
- package/dist/mcp-server/tools/definitions/dataframe-query.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/dataframe-query.tool.js +124 -0
- package/dist/mcp-server/tools/definitions/dataframe-query.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/{compare-metric.tool.d.ts → fetch-frames.tool.d.ts} +25 -4
- package/dist/mcp-server/tools/definitions/fetch-frames.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/fetch-frames.tool.js +235 -0
- package/dist/mcp-server/tools/definitions/fetch-frames.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-financials.tool.d.ts +5 -0
- package/dist/mcp-server/tools/definitions/get-financials.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-financials.tool.js +49 -0
- package/dist/mcp-server/tools/definitions/get-financials.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-filings.tool.d.ts +7 -0
- package/dist/mcp-server/tools/definitions/search-filings.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-filings.tool.js +97 -4
- package/dist/mcp-server/tools/definitions/search-filings.tool.js.map +1 -1
- package/dist/services/canvas-bridge/canvas-bridge.d.ts +146 -0
- package/dist/services/canvas-bridge/canvas-bridge.d.ts.map +1 -0
- package/dist/services/canvas-bridge/canvas-bridge.js +270 -0
- package/dist/services/canvas-bridge/canvas-bridge.js.map +1 -0
- package/dist/services/canvas-bridge/sql-gate-extras.d.ts +15 -0
- package/dist/services/canvas-bridge/sql-gate-extras.d.ts.map +1 -0
- package/dist/services/canvas-bridge/sql-gate-extras.js +49 -0
- package/dist/services/canvas-bridge/sql-gate-extras.js.map +1 -0
- package/dist/services/edgar/edgar-api-service.d.ts +2 -0
- package/dist/services/edgar/edgar-api-service.d.ts.map +1 -1
- package/dist/services/edgar/edgar-api-service.js +11 -1
- package/dist/services/edgar/edgar-api-service.js.map +1 -1
- package/dist/services/edgar/types.d.ts +2 -0
- package/dist/services/edgar/types.d.ts.map +1 -1
- package/package.json +2 -1
- package/server.json +3 -3
- package/dist/mcp-server/tools/definitions/compare-metric.tool.d.ts.map +0 -1
- package/dist/mcp-server/tools/definitions/compare-metric.tool.js +0 -149
- package/dist/mcp-server/tools/definitions/compare-metric.tool.js.map +0 -1
|
@@ -4,7 +4,23 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
6
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
import { getCanvasBridge, toDatasetField } from '../../../services/canvas-bridge/canvas-bridge.js';
|
|
7
8
|
import { getEdgarApiService } from '../../../services/edgar/edgar-api-service.js';
|
|
9
|
+
function eftsHitToRow(hit) {
|
|
10
|
+
const displayName = hit._source.display_names?.[0] || '';
|
|
11
|
+
return {
|
|
12
|
+
accession_number: hit._source.adsh || hit._id.split(':')[0] || hit._id,
|
|
13
|
+
form: hit._source.form ?? null,
|
|
14
|
+
filing_date: hit._source.file_date,
|
|
15
|
+
period_ending: hit._source.period_ending ?? null,
|
|
16
|
+
company_name: cleanCompanyName(displayName),
|
|
17
|
+
cik: hit._source.ciks?.[0] ?? null,
|
|
18
|
+
ticker: extractTicker(displayName),
|
|
19
|
+
file_description: hit._source.file_description ?? null,
|
|
20
|
+
sic: hit._source.sics?.[0] ?? null,
|
|
21
|
+
location: hit._source.biz_locations?.[0] ?? null,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
8
24
|
/**
|
|
9
25
|
* EDGAR's `display_names[0]` embeds the ticker(s) and CIK in trailing parentheticals
|
|
10
26
|
* (e.g., "Apple Inc. (AAPL) (CIK 0000320193)"). Strip them so consumers see a clean
|
|
@@ -13,10 +29,26 @@ import { getEdgarApiService } from '../../../services/edgar/edgar-api-service.js
|
|
|
13
29
|
function cleanCompanyName(displayName) {
|
|
14
30
|
return displayName
|
|
15
31
|
.replace(/\s*\(CIK\s*\d+\)/gi, '')
|
|
16
|
-
.replace(/\s*\([A-Z0-9,\s
|
|
32
|
+
.replace(/\s*\([A-Z0-9,\s.-]+\)\s*$/, '')
|
|
17
33
|
.replace(/\s+/g, ' ')
|
|
18
34
|
.trim();
|
|
19
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Pull the primary ticker out of `display_names[0]`. Strips the CIK parenthetical
|
|
38
|
+
* first, then captures the trailing parens iff they look like ticker symbols
|
|
39
|
+
* (uppercase letters, digits, dots, hyphens — optionally a comma-separated list
|
|
40
|
+
* for multi-class issuers like BRK-A/BRK-B). Returns null when no ticker
|
|
41
|
+
* parenthetical is present (private filers, foreign filers, filings with no
|
|
42
|
+
* exchange listing).
|
|
43
|
+
*/
|
|
44
|
+
function extractTicker(displayName) {
|
|
45
|
+
const withoutCik = displayName.replace(/\s*\(CIK\s*\d+\)/gi, '');
|
|
46
|
+
const match = withoutCik.match(/\(([A-Z][A-Z0-9.-]*(?:,\s*[A-Z][A-Z0-9.-]*)*)\)\s*$/);
|
|
47
|
+
if (!match?.[1])
|
|
48
|
+
return null;
|
|
49
|
+
const first = match[1].split(',')[0]?.trim();
|
|
50
|
+
return first ? first : null;
|
|
51
|
+
}
|
|
20
52
|
/**
|
|
21
53
|
* Extract entity targeting (cik: or ticker:) from a query string,
|
|
22
54
|
* resolve to a CIK, and return the cleaned query + resolved CIK.
|
|
@@ -121,6 +153,10 @@ export const searchFilingsTool = tool('secedgar_search_filings', {
|
|
|
121
153
|
.string()
|
|
122
154
|
.describe('Filing entity, with ticker/CIK parentheticals stripped.'),
|
|
123
155
|
cik: z.string().describe('Filing entity CIK, zero-padded to 10 digits.'),
|
|
156
|
+
ticker: z
|
|
157
|
+
.string()
|
|
158
|
+
.optional()
|
|
159
|
+
.describe('Primary ticker symbol parsed from the EFTS display name. Absent for private filers, foreign filers without a US listing, and filings whose display name omits the ticker parenthetical. For multi-class issuers (e.g., BRK-A / BRK-B), this is the first class listed.'),
|
|
124
160
|
file_description: z
|
|
125
161
|
.string()
|
|
126
162
|
.optional()
|
|
@@ -140,6 +176,19 @@ export const searchFilingsTool = tool('secedgar_search_filings', {
|
|
|
140
176
|
.record(z.string(), z.number())
|
|
141
177
|
.optional()
|
|
142
178
|
.describe('Count of results by form type. Helps narrow follow-up searches.'),
|
|
179
|
+
dataset: z
|
|
180
|
+
.object({
|
|
181
|
+
name: z
|
|
182
|
+
.string()
|
|
183
|
+
.describe('Dataframe handle (df_XXXXX_XXXXX) — pass to secedgar_dataframe_query.'),
|
|
184
|
+
row_count: z.number().describe('Rows materialized in the dataframe.'),
|
|
185
|
+
expires_at: z.string().describe('ISO 8601 expiry timestamp.'),
|
|
186
|
+
truncated: z
|
|
187
|
+
.boolean()
|
|
188
|
+
.describe('True when EFTS reported more text matches than the window we already fetched — additional rows exist beyond the dataframe. Page further with `offset` for the inline view; the canvas dataframe is bounded by the single response window.'),
|
|
189
|
+
})
|
|
190
|
+
.optional()
|
|
191
|
+
.describe('Canvas dataframe holding the hits already fetched for the inline response. Absent when total ≤ inline limit, canvas is unavailable, or materialization failed. The dataframe contains the raw EFTS results (entity-filtered when ticker:/cik: was used) — query with secedgar_dataframe_query SQL.'),
|
|
143
192
|
}),
|
|
144
193
|
async handler(input, ctx) {
|
|
145
194
|
// Validate date range: both or neither
|
|
@@ -187,13 +236,16 @@ export const searchFilingsTool = tool('secedgar_search_filings', {
|
|
|
187
236
|
const sliced = hits.slice(startIdx, startIdx + input.limit);
|
|
188
237
|
const results = sliced.map((hit) => {
|
|
189
238
|
const accessionNumber = hit._source.adsh || hit._id.split(':')[0] || hit._id;
|
|
239
|
+
const displayName = hit._source.display_names?.[0] || '';
|
|
240
|
+
const ticker = extractTicker(displayName);
|
|
190
241
|
return {
|
|
191
242
|
accession_number: accessionNumber,
|
|
192
243
|
form: hit._source.form ?? undefined,
|
|
193
244
|
filing_date: hit._source.file_date,
|
|
194
245
|
period_ending: hit._source.period_ending ?? undefined,
|
|
195
|
-
company_name: cleanCompanyName(
|
|
246
|
+
company_name: cleanCompanyName(displayName),
|
|
196
247
|
cik: hit._source.ciks?.[0] || '',
|
|
248
|
+
...(ticker !== null && { ticker }),
|
|
197
249
|
file_description: hit._source.file_description ?? undefined,
|
|
198
250
|
sic: hit._source.sics?.[0] ?? undefined,
|
|
199
251
|
location: hit._source.biz_locations?.[0] ?? undefined,
|
|
@@ -219,12 +271,46 @@ export const searchFilingsTool = tool('secedgar_search_filings', {
|
|
|
219
271
|
formDistribution[bucket.key] = bucket.doc_count;
|
|
220
272
|
}
|
|
221
273
|
}
|
|
274
|
+
let dataset;
|
|
275
|
+
const bridge = getCanvasBridge();
|
|
276
|
+
const eftsTotal = response.hits.total.value;
|
|
277
|
+
// Materialize the hits we already fetched — no additional EFTS calls.
|
|
278
|
+
// `hits` is already entity-filtered (and sorted, where applicable) above.
|
|
279
|
+
// Skip when the response fits inline or when there's no canvas.
|
|
280
|
+
if (bridge && hits.length > input.limit) {
|
|
281
|
+
// Truncated when EFTS reported more text matches than the window we
|
|
282
|
+
// fetched. Under entity targeting, additional entity hits may exist
|
|
283
|
+
// beyond the window we sampled; under no targeting, more text matches
|
|
284
|
+
// exist past the window. Either way, the dataframe is a sample.
|
|
285
|
+
const truncated = eftsTotal > response.hits.hits.length;
|
|
286
|
+
const registered = await bridge.registerDataframe(ctx, {
|
|
287
|
+
rows: hits.map(eftsHitToRow),
|
|
288
|
+
sourceTool: 'secedgar_search_filings',
|
|
289
|
+
queryParams: {
|
|
290
|
+
query,
|
|
291
|
+
forms: input.forms,
|
|
292
|
+
start_date: input.start_date,
|
|
293
|
+
end_date: input.end_date,
|
|
294
|
+
entity_cik: entityCik,
|
|
295
|
+
},
|
|
296
|
+
truncated,
|
|
297
|
+
});
|
|
298
|
+
if (registered)
|
|
299
|
+
dataset = { ...toDatasetField(registered), truncated };
|
|
300
|
+
}
|
|
222
301
|
ctx.log.info('Filing search completed', {
|
|
223
302
|
query: input.query,
|
|
224
303
|
total,
|
|
225
304
|
resultCount: results.length,
|
|
305
|
+
datasetName: dataset?.name,
|
|
226
306
|
});
|
|
227
|
-
return {
|
|
307
|
+
return {
|
|
308
|
+
total,
|
|
309
|
+
total_is_exact: totalIsExact,
|
|
310
|
+
results,
|
|
311
|
+
form_distribution: formDistribution,
|
|
312
|
+
dataset,
|
|
313
|
+
};
|
|
228
314
|
},
|
|
229
315
|
format: (result) => {
|
|
230
316
|
const exactness = result.total_is_exact ? 'exact' : 'capped at 10,000';
|
|
@@ -234,7 +320,8 @@ export const searchFilingsTool = tool('secedgar_search_filings', {
|
|
|
234
320
|
const desc = r.file_description ? ` — ${r.file_description}` : '';
|
|
235
321
|
const sic = r.sic ? ` | SIC ${r.sic}` : '';
|
|
236
322
|
const loc = r.location ? ` | ${r.location}` : '';
|
|
237
|
-
|
|
323
|
+
const ident = r.ticker ? `${r.ticker}, CIK ${r.cik}` : `CIK ${r.cik}`;
|
|
324
|
+
lines.push(`- ${r.form ?? 'N/A'} ${r.filing_date}${period} — ${r.company_name} (${ident})${sic}${loc}${desc} [${r.accession_number}]`);
|
|
238
325
|
}
|
|
239
326
|
if (result.form_distribution) {
|
|
240
327
|
const dist = Object.entries(result.form_distribution)
|
|
@@ -242,6 +329,12 @@ export const searchFilingsTool = tool('secedgar_search_filings', {
|
|
|
242
329
|
.join(', ');
|
|
243
330
|
lines.push(`\nForm distribution: ${dist}`);
|
|
244
331
|
}
|
|
332
|
+
if (result.dataset) {
|
|
333
|
+
const truncatedNote = result.dataset.truncated
|
|
334
|
+
? ' (truncated — more matches exist beyond the EFTS window)'
|
|
335
|
+
: '';
|
|
336
|
+
lines.push(`\nDataset: ${result.dataset.name} (${result.dataset.row_count} rows, expires ${result.dataset.expires_at})${truncatedNote} — query with secedgar_dataframe_query.`);
|
|
337
|
+
}
|
|
245
338
|
return [{ type: 'text', text: lines.join('\n') }];
|
|
246
339
|
},
|
|
247
340
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-filings.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-filings.tool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"search-filings.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-filings.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Adapter between the SEC EDGAR tools and the framework
|
|
3
|
+
* DataCanvas primitive. Holds one shared canvas per tenant, generates
|
|
4
|
+
* `df_XXXXX_XXXXX` table names, derives all-nullable schemas (sparse SEC
|
|
5
|
+
* columns must not trip NOT NULL appender rollbacks), tracks per-table TTL +
|
|
6
|
+
* provenance in `ctx.state`, and lazy-sweeps expired tables on every public
|
|
7
|
+
* op. Best-effort: failed canvas operations log a warning and return
|
|
8
|
+
* `undefined`/empty so the caller's inline response remains useful.
|
|
9
|
+
*
|
|
10
|
+
* Per-table TTL is bridge-side bookkeeping; backstop for
|
|
11
|
+
* cyanheads/mcp-ts-core#140 until the framework exposes
|
|
12
|
+
* `RegisterTableOptions.ttlMs`.
|
|
13
|
+
* @module services/canvas-bridge/canvas-bridge
|
|
14
|
+
*/
|
|
15
|
+
import type { Context } from '@cyanheads/mcp-ts-core';
|
|
16
|
+
import { type ColumnSchema, type DataCanvas, type QueryResult } from '@cyanheads/mcp-ts-core/canvas';
|
|
17
|
+
/** Per-table provenance + TTL metadata persisted in `ctx.state`. */
|
|
18
|
+
export interface DataframeMeta {
|
|
19
|
+
/** Resolved column schema (all-nullable). */
|
|
20
|
+
columnSchema: ColumnSchema[];
|
|
21
|
+
/** ISO 8601 creation timestamp. */
|
|
22
|
+
createdAt: string;
|
|
23
|
+
/** ISO 8601 expiry timestamp. Lazy-checked on every dataframe op. */
|
|
24
|
+
expiresAt: string;
|
|
25
|
+
/** Materialization cap that produced `truncated`, when applicable. */
|
|
26
|
+
maxRows: number | undefined;
|
|
27
|
+
/** Input parameters the tool was called with, for downstream interpretation. */
|
|
28
|
+
queryParams: Record<string, unknown>;
|
|
29
|
+
/** Materialized row count. */
|
|
30
|
+
rowCount: number;
|
|
31
|
+
/** Tool that produced this dataframe (e.g. `secedgar_fetch_frames`). */
|
|
32
|
+
sourceTool: string;
|
|
33
|
+
/** Canvas table name (`df_XXXXX_XXXXX`). */
|
|
34
|
+
tableName: string;
|
|
35
|
+
/**
|
|
36
|
+
* True when the upstream source has more rows than were materialized
|
|
37
|
+
* (e.g. EFTS 10k cap exceeded). False when the dataframe holds the full
|
|
38
|
+
* upstream result.
|
|
39
|
+
*/
|
|
40
|
+
truncated: boolean;
|
|
41
|
+
}
|
|
42
|
+
/** Result of a successful `registerDataframe` call. */
|
|
43
|
+
export interface RegisterDataframeResult {
|
|
44
|
+
columnSchema: ColumnSchema[];
|
|
45
|
+
expiresAt: string;
|
|
46
|
+
rowCount: number;
|
|
47
|
+
tableName: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Wire shape for the `dataset` field on tool outputs. Callers spread
|
|
51
|
+
* additional fields (e.g. `truncated`) when applicable.
|
|
52
|
+
*/
|
|
53
|
+
export declare function toDatasetField(registered: RegisterDataframeResult): {
|
|
54
|
+
name: string;
|
|
55
|
+
row_count: number;
|
|
56
|
+
expires_at: string;
|
|
57
|
+
};
|
|
58
|
+
/** Options accepted by {@link CanvasBridge.registerDataframe}. */
|
|
59
|
+
export interface RegisterDataframeOptions {
|
|
60
|
+
maxRows?: number;
|
|
61
|
+
queryParams: Record<string, unknown>;
|
|
62
|
+
rows: Record<string, unknown>[];
|
|
63
|
+
sourceTool: string;
|
|
64
|
+
truncated?: boolean;
|
|
65
|
+
}
|
|
66
|
+
/** Options accepted by {@link CanvasBridge.query}. */
|
|
67
|
+
export interface BridgeQueryOptions {
|
|
68
|
+
/** Inline row preview cap. */
|
|
69
|
+
preview?: number;
|
|
70
|
+
/** Query params to record as provenance if registerAs is set. */
|
|
71
|
+
queryParams?: Record<string, unknown>;
|
|
72
|
+
/** Optional new dataframe name to materialize the result under. */
|
|
73
|
+
registerAs?: string;
|
|
74
|
+
/** Hard cap on rows materialized in the response (default 10_000). */
|
|
75
|
+
rowLimit?: number;
|
|
76
|
+
/** Tool name to record as source if registerAs is set. */
|
|
77
|
+
sourceTool?: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Walk a sample of rows, infer column types, force every column to
|
|
81
|
+
* `nullable: true`. The framework's default sniffer infers NOT NULL from
|
|
82
|
+
* non-null samples; DuckDB rolls back the entire appender batch the first
|
|
83
|
+
* time a sparse SEC column (e.g. `loc`, `ticker`) carries a null on a row
|
|
84
|
+
* past the sample window.
|
|
85
|
+
*/
|
|
86
|
+
export declare function deriveAllNullableSchema(rows: Record<string, unknown>[]): ColumnSchema[];
|
|
87
|
+
export declare class CanvasBridge {
|
|
88
|
+
private readonly canvas;
|
|
89
|
+
constructor(canvas: DataCanvas);
|
|
90
|
+
/**
|
|
91
|
+
* Persist a row set as `df_<id>` on the tenant's shared canvas. Returns
|
|
92
|
+
* `undefined` on any canvas failure so callers can surface their inline
|
|
93
|
+
* response without leaking infrastructure errors.
|
|
94
|
+
*/
|
|
95
|
+
registerDataframe(ctx: Context, options: RegisterDataframeOptions): Promise<RegisterDataframeResult | undefined>;
|
|
96
|
+
/**
|
|
97
|
+
* List dataframes with provenance. Sweeps expired tables first so the
|
|
98
|
+
* listing reflects what's actually queryable.
|
|
99
|
+
*/
|
|
100
|
+
describe(ctx: Context, tableName?: string): Promise<DataframeMeta[]>;
|
|
101
|
+
/**
|
|
102
|
+
* Run a SELECT against the shared canvas. Framework gate runs inside
|
|
103
|
+
* `canvas.query`; this method additionally rejects system-catalog access
|
|
104
|
+
* before handing the SQL off. Optional `registerAs` chains the result as a
|
|
105
|
+
* new dataframe with a fresh per-table TTL (not inherited from parents).
|
|
106
|
+
*/
|
|
107
|
+
query(ctx: Context, sql: string, options?: BridgeQueryOptions): Promise<{
|
|
108
|
+
result: QueryResult;
|
|
109
|
+
meta?: DataframeMeta;
|
|
110
|
+
}>;
|
|
111
|
+
/**
|
|
112
|
+
* Idempotent drop. Removes the table from the canvas and the metadata
|
|
113
|
+
* entry from `ctx.state`. Returns true when the table was found and
|
|
114
|
+
* removed; false when neither side had it.
|
|
115
|
+
*/
|
|
116
|
+
drop(ctx: Context, tableName: string): Promise<boolean>;
|
|
117
|
+
/**
|
|
118
|
+
* Iterate provenance entries, drop tables whose `expiresAt` is in the
|
|
119
|
+
* past. Best-effort: a failure to drop one table does not stop the sweep
|
|
120
|
+
* for others.
|
|
121
|
+
*/
|
|
122
|
+
private sweepExpired;
|
|
123
|
+
/**
|
|
124
|
+
* Cursor-paged scan of metadata entries. Yields `{ key, meta }` per
|
|
125
|
+
* registered dataframe; consumers either collect or act + delete in-place.
|
|
126
|
+
*/
|
|
127
|
+
private iterateMeta;
|
|
128
|
+
/**
|
|
129
|
+
* Acquire the tenant's shared canvas. Reuse the stored canvas ID when one
|
|
130
|
+
* is still live; mint a fresh canvas when the stored ID is unknown or
|
|
131
|
+
* expired (registry returns NotFound; `acquire(undefined)` mints a new one).
|
|
132
|
+
*/
|
|
133
|
+
private acquireSharedCanvas;
|
|
134
|
+
/** Mint a `df_XXXXX_XXXXX` table name (14 chars, ~3.7×10^15 keyspace). */
|
|
135
|
+
private mintTableName;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Wire the canvas bridge during `setup()`. `canvas` is `undefined` when the
|
|
139
|
+
* framework didn't construct a DataCanvas (`CANVAS_PROVIDER_TYPE=none`,
|
|
140
|
+
* default, or Workers). Tools that materialize dataframes call
|
|
141
|
+
* {@link getCanvasBridge} and skip materialization when the bridge is absent.
|
|
142
|
+
*/
|
|
143
|
+
export declare function initCanvasBridge(canvas: DataCanvas | undefined): void;
|
|
144
|
+
/** Return the canvas bridge, or `undefined` when canvas is unavailable. */
|
|
145
|
+
export declare function getCanvasBridge(): CanvasBridge | undefined;
|
|
146
|
+
//# sourceMappingURL=canvas-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-bridge.d.ts","sourceRoot":"","sources":["../../../src/services/canvas-bridge/canvas-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Adapter between the SEC EDGAR tools and the framework
|
|
3
|
+
* DataCanvas primitive. Holds one shared canvas per tenant, generates
|
|
4
|
+
* `df_XXXXX_XXXXX` table names, derives all-nullable schemas (sparse SEC
|
|
5
|
+
* columns must not trip NOT NULL appender rollbacks), tracks per-table TTL +
|
|
6
|
+
* provenance in `ctx.state`, and lazy-sweeps expired tables on every public
|
|
7
|
+
* op. Best-effort: failed canvas operations log a warning and return
|
|
8
|
+
* `undefined`/empty so the caller's inline response remains useful.
|
|
9
|
+
*
|
|
10
|
+
* Per-table TTL is bridge-side bookkeeping; backstop for
|
|
11
|
+
* cyanheads/mcp-ts-core#140 until the framework exposes
|
|
12
|
+
* `RegisterTableOptions.ttlMs`.
|
|
13
|
+
* @module services/canvas-bridge/canvas-bridge
|
|
14
|
+
*/
|
|
15
|
+
import { inferSchemaFromRows, } from '@cyanheads/mcp-ts-core/canvas';
|
|
16
|
+
import { idGenerator } from '@cyanheads/mcp-ts-core/utils';
|
|
17
|
+
import { getServerConfig } from '../../config/server-config.js';
|
|
18
|
+
import { assertNoSystemCatalogAccess } from './sql-gate-extras.js';
|
|
19
|
+
/**
|
|
20
|
+
* Wire shape for the `dataset` field on tool outputs. Callers spread
|
|
21
|
+
* additional fields (e.g. `truncated`) when applicable.
|
|
22
|
+
*/
|
|
23
|
+
export function toDatasetField(registered) {
|
|
24
|
+
return {
|
|
25
|
+
name: registered.tableName,
|
|
26
|
+
row_count: registered.rowCount,
|
|
27
|
+
expires_at: registered.expiresAt,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const META_PREFIX = 'df-meta/';
|
|
31
|
+
const CANVAS_ID_KEY = 'canvas-id';
|
|
32
|
+
/** Token character set for `df_XXXXX_XXXXX` table names. */
|
|
33
|
+
const TABLE_NAME_CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
|
|
34
|
+
/**
|
|
35
|
+
* Walk a sample of rows, infer column types, force every column to
|
|
36
|
+
* `nullable: true`. The framework's default sniffer infers NOT NULL from
|
|
37
|
+
* non-null samples; DuckDB rolls back the entire appender batch the first
|
|
38
|
+
* time a sparse SEC column (e.g. `loc`, `ticker`) carries a null on a row
|
|
39
|
+
* past the sample window.
|
|
40
|
+
*/
|
|
41
|
+
export function deriveAllNullableSchema(rows) {
|
|
42
|
+
return inferSchemaFromRows(rows).map((col) => ({ ...col, nullable: true }));
|
|
43
|
+
}
|
|
44
|
+
export class CanvasBridge {
|
|
45
|
+
canvas;
|
|
46
|
+
constructor(canvas) {
|
|
47
|
+
this.canvas = canvas;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Persist a row set as `df_<id>` on the tenant's shared canvas. Returns
|
|
51
|
+
* `undefined` on any canvas failure so callers can surface their inline
|
|
52
|
+
* response without leaking infrastructure errors.
|
|
53
|
+
*/
|
|
54
|
+
async registerDataframe(ctx, options) {
|
|
55
|
+
if (options.rows.length === 0) {
|
|
56
|
+
ctx.log.debug('Skipping dataframe registration — no rows', {
|
|
57
|
+
sourceTool: options.sourceTool,
|
|
58
|
+
});
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
await this.sweepExpired(ctx);
|
|
63
|
+
const instance = await this.acquireSharedCanvas(ctx);
|
|
64
|
+
const tableName = this.mintTableName();
|
|
65
|
+
const schema = deriveAllNullableSchema(options.rows);
|
|
66
|
+
const result = await instance.registerTable(tableName, options.rows, { schema });
|
|
67
|
+
const now = Date.now();
|
|
68
|
+
const ttlMs = getServerConfig().datasetTtlSeconds * 1000;
|
|
69
|
+
const meta = {
|
|
70
|
+
tableName: result.tableName,
|
|
71
|
+
sourceTool: options.sourceTool,
|
|
72
|
+
queryParams: options.queryParams,
|
|
73
|
+
createdAt: new Date(now).toISOString(),
|
|
74
|
+
expiresAt: new Date(now + ttlMs).toISOString(),
|
|
75
|
+
rowCount: result.rowCount,
|
|
76
|
+
truncated: options.truncated ?? false,
|
|
77
|
+
maxRows: options.maxRows,
|
|
78
|
+
columnSchema: schema,
|
|
79
|
+
};
|
|
80
|
+
await ctx.state.set(`${META_PREFIX}${result.tableName}`, meta);
|
|
81
|
+
ctx.log.info('Dataframe registered', {
|
|
82
|
+
tableName: result.tableName,
|
|
83
|
+
rowCount: result.rowCount,
|
|
84
|
+
sourceTool: options.sourceTool,
|
|
85
|
+
});
|
|
86
|
+
return {
|
|
87
|
+
tableName: result.tableName,
|
|
88
|
+
rowCount: result.rowCount,
|
|
89
|
+
expiresAt: meta.expiresAt,
|
|
90
|
+
columnSchema: schema,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
ctx.log.warning('Dataframe registration failed', {
|
|
95
|
+
error: error instanceof Error ? error.message : String(error),
|
|
96
|
+
sourceTool: options.sourceTool,
|
|
97
|
+
});
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* List dataframes with provenance. Sweeps expired tables first so the
|
|
103
|
+
* listing reflects what's actually queryable.
|
|
104
|
+
*/
|
|
105
|
+
async describe(ctx, tableName) {
|
|
106
|
+
await this.sweepExpired(ctx);
|
|
107
|
+
if (tableName) {
|
|
108
|
+
const meta = await ctx.state.get(`${META_PREFIX}${tableName}`);
|
|
109
|
+
return meta ? [meta] : [];
|
|
110
|
+
}
|
|
111
|
+
const entries = [];
|
|
112
|
+
for await (const { meta } of this.iterateMeta(ctx))
|
|
113
|
+
entries.push(meta);
|
|
114
|
+
return entries.sort((a, b) => b.createdAt.localeCompare(a.createdAt));
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Run a SELECT against the shared canvas. Framework gate runs inside
|
|
118
|
+
* `canvas.query`; this method additionally rejects system-catalog access
|
|
119
|
+
* before handing the SQL off. Optional `registerAs` chains the result as a
|
|
120
|
+
* new dataframe with a fresh per-table TTL (not inherited from parents).
|
|
121
|
+
*/
|
|
122
|
+
async query(ctx, sql, options = {}) {
|
|
123
|
+
assertNoSystemCatalogAccess(sql);
|
|
124
|
+
await this.sweepExpired(ctx);
|
|
125
|
+
const instance = await this.acquireSharedCanvas(ctx);
|
|
126
|
+
const registerAs = options.registerAs;
|
|
127
|
+
const result = await instance.query(sql, {
|
|
128
|
+
...(options.preview !== undefined && { preview: options.preview }),
|
|
129
|
+
...(options.rowLimit !== undefined && { rowLimit: options.rowLimit }),
|
|
130
|
+
...(registerAs !== undefined && { registerAs }),
|
|
131
|
+
signal: ctx.signal,
|
|
132
|
+
});
|
|
133
|
+
let meta;
|
|
134
|
+
if (registerAs && result.tableName) {
|
|
135
|
+
const now = Date.now();
|
|
136
|
+
const ttlMs = getServerConfig().datasetTtlSeconds * 1000;
|
|
137
|
+
meta = {
|
|
138
|
+
tableName: result.tableName,
|
|
139
|
+
sourceTool: options.sourceTool ?? 'secedgar_dataframe_query',
|
|
140
|
+
queryParams: options.queryParams ?? { sql },
|
|
141
|
+
createdAt: new Date(now).toISOString(),
|
|
142
|
+
expiresAt: new Date(now + ttlMs).toISOString(),
|
|
143
|
+
rowCount: result.rowCount,
|
|
144
|
+
truncated: false,
|
|
145
|
+
maxRows: undefined,
|
|
146
|
+
columnSchema: result.columns.map((name) => ({
|
|
147
|
+
name,
|
|
148
|
+
type: 'VARCHAR',
|
|
149
|
+
nullable: true,
|
|
150
|
+
})),
|
|
151
|
+
};
|
|
152
|
+
await ctx.state.set(`${META_PREFIX}${result.tableName}`, meta);
|
|
153
|
+
}
|
|
154
|
+
return meta ? { result, meta } : { result };
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Idempotent drop. Removes the table from the canvas and the metadata
|
|
158
|
+
* entry from `ctx.state`. Returns true when the table was found and
|
|
159
|
+
* removed; false when neither side had it.
|
|
160
|
+
*/
|
|
161
|
+
async drop(ctx, tableName) {
|
|
162
|
+
await this.sweepExpired(ctx);
|
|
163
|
+
const metaKey = `${META_PREFIX}${tableName}`;
|
|
164
|
+
const hadMeta = (await ctx.state.get(metaKey)) !== null;
|
|
165
|
+
await ctx.state.delete(metaKey);
|
|
166
|
+
try {
|
|
167
|
+
const instance = await this.acquireSharedCanvas(ctx);
|
|
168
|
+
const dropped = await instance.drop(tableName);
|
|
169
|
+
return dropped || hadMeta;
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
ctx.log.warning('Canvas drop failed', {
|
|
173
|
+
tableName,
|
|
174
|
+
error: error instanceof Error ? error.message : String(error),
|
|
175
|
+
});
|
|
176
|
+
return hadMeta;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Iterate provenance entries, drop tables whose `expiresAt` is in the
|
|
181
|
+
* past. Best-effort: a failure to drop one table does not stop the sweep
|
|
182
|
+
* for others.
|
|
183
|
+
*/
|
|
184
|
+
async sweepExpired(ctx) {
|
|
185
|
+
const nowIso = new Date().toISOString();
|
|
186
|
+
let instance;
|
|
187
|
+
for await (const { key, meta } of this.iterateMeta(ctx)) {
|
|
188
|
+
if (meta.expiresAt > nowIso)
|
|
189
|
+
continue;
|
|
190
|
+
instance ??= await this.acquireSharedCanvas(ctx).catch(() => undefined);
|
|
191
|
+
if (instance) {
|
|
192
|
+
try {
|
|
193
|
+
await instance.drop(meta.tableName);
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
ctx.log.warning('TTL sweep drop failed', {
|
|
197
|
+
tableName: meta.tableName,
|
|
198
|
+
error: error instanceof Error ? error.message : String(error),
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
await ctx.state.delete(key);
|
|
203
|
+
ctx.log.debug('Expired dataframe swept', {
|
|
204
|
+
tableName: meta.tableName,
|
|
205
|
+
expiredAt: meta.expiresAt,
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Cursor-paged scan of metadata entries. Yields `{ key, meta }` per
|
|
211
|
+
* registered dataframe; consumers either collect or act + delete in-place.
|
|
212
|
+
*/
|
|
213
|
+
async *iterateMeta(ctx) {
|
|
214
|
+
let cursor;
|
|
215
|
+
do {
|
|
216
|
+
const page = await ctx.state.list(META_PREFIX, {
|
|
217
|
+
...(cursor !== undefined && { cursor }),
|
|
218
|
+
limit: 100,
|
|
219
|
+
});
|
|
220
|
+
for (const item of page.items) {
|
|
221
|
+
if (item.value)
|
|
222
|
+
yield { key: item.key, meta: item.value };
|
|
223
|
+
}
|
|
224
|
+
cursor = page.cursor;
|
|
225
|
+
} while (cursor);
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Acquire the tenant's shared canvas. Reuse the stored canvas ID when one
|
|
229
|
+
* is still live; mint a fresh canvas when the stored ID is unknown or
|
|
230
|
+
* expired (registry returns NotFound; `acquire(undefined)` mints a new one).
|
|
231
|
+
*/
|
|
232
|
+
async acquireSharedCanvas(ctx) {
|
|
233
|
+
// Cast: framework `Context` is structurally compatible with `RequestContext`
|
|
234
|
+
// but lacks the index signature, so a direct call won't type-check.
|
|
235
|
+
const reqCtx = ctx;
|
|
236
|
+
const stored = await ctx.state.get(CANVAS_ID_KEY);
|
|
237
|
+
if (stored) {
|
|
238
|
+
try {
|
|
239
|
+
return await this.canvas.acquire(stored, reqCtx);
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
await ctx.state.delete(CANVAS_ID_KEY);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
const instance = await this.canvas.acquire(undefined, reqCtx);
|
|
246
|
+
await ctx.state.set(CANVAS_ID_KEY, instance.canvasId);
|
|
247
|
+
return instance;
|
|
248
|
+
}
|
|
249
|
+
/** Mint a `df_XXXXX_XXXXX` table name (14 chars, ~3.7×10^15 keyspace). */
|
|
250
|
+
mintTableName() {
|
|
251
|
+
const left = idGenerator.generateRandomString(5, TABLE_NAME_CHARSET);
|
|
252
|
+
const right = idGenerator.generateRandomString(5, TABLE_NAME_CHARSET);
|
|
253
|
+
return `df_${left}_${right}`;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
let _bridge;
|
|
257
|
+
/**
|
|
258
|
+
* Wire the canvas bridge during `setup()`. `canvas` is `undefined` when the
|
|
259
|
+
* framework didn't construct a DataCanvas (`CANVAS_PROVIDER_TYPE=none`,
|
|
260
|
+
* default, or Workers). Tools that materialize dataframes call
|
|
261
|
+
* {@link getCanvasBridge} and skip materialization when the bridge is absent.
|
|
262
|
+
*/
|
|
263
|
+
export function initCanvasBridge(canvas) {
|
|
264
|
+
_bridge = canvas ? new CanvasBridge(canvas) : undefined;
|
|
265
|
+
}
|
|
266
|
+
/** Return the canvas bridge, or `undefined` when canvas is unavailable. */
|
|
267
|
+
export function getCanvasBridge() {
|
|
268
|
+
return _bridge;
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=canvas-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-bridge.js","sourceRoot":"","sources":["../../../src/services/canvas-bridge/canvas-bridge.ts"],"names":[],"mappings":"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"}
|