@cyanheads/secedgar-mcp-server 0.10.4 → 0.11.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 +3 -0
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/tools/definitions/company-search.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/company-search.tool.js +24 -3
- package/dist/mcp-server/tools/definitions/company-search.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/dataframe-query.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/dataframe-query.tool.js +1 -0
- package/dist/mcp-server/tools/definitions/dataframe-query.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/get-filing.tool.d.ts +17 -0
- package/dist/mcp-server/tools/definitions/get-filing.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/get-filing.tool.js +179 -43
- package/dist/mcp-server/tools/definitions/get-filing.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-filings.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-filings.tool.js +16 -4
- package/dist/mcp-server/tools/definitions/search-filings.tool.js.map +1 -1
- package/dist/services/canvas-bridge/canvas-bridge.d.ts.map +1 -1
- package/dist/services/canvas-bridge/canvas-bridge.js +48 -4
- package/dist/services/canvas-bridge/canvas-bridge.js.map +1 -1
- package/dist/services/canvas-bridge/sql-gate-extras.d.ts +12 -0
- package/dist/services/canvas-bridge/sql-gate-extras.d.ts.map +1 -1
- package/dist/services/canvas-bridge/sql-gate-extras.js +17 -0
- package/dist/services/canvas-bridge/sql-gate-extras.js.map +1 -1
- package/dist/services/edgar/filing-to-text.d.ts +44 -1
- package/dist/services/edgar/filing-to-text.d.ts.map +1 -1
- package/dist/services/edgar/filing-to-text.js +118 -1
- package/dist/services/edgar/filing-to-text.js.map +1 -1
- package/package.json +3 -3
- package/server.json +3 -3
package/README.md
CHANGED
|
@@ -78,6 +78,9 @@ Fetch a specific filing's metadata and document content by accession number.
|
|
|
78
78
|
- Converts HTML filings to readable plain text
|
|
79
79
|
- Configurable content limit (1K–200K characters, default 50K)
|
|
80
80
|
- Can fetch specific exhibits by document name
|
|
81
|
+
- **Offset paging** for large documents (10-K, S-1/A can exceed 1M chars): pass `next_offset` from a truncated response as `offset` on the next call to continue reading; first-page truncated responses include a detected `outline` (headings with offsets) for targeted navigation
|
|
82
|
+
- **Section targeting** via the `section` param: jumps directly to a named heading by case-insensitive substring match (e.g. `"risk factors"`, `"item 7"`, `"certain relationships"`); on a miss, the error carries the detected outline so you can pick the correct heading
|
|
83
|
+
- Extracted text is cached per `accession + document` (bounded LRU, 8 entries), making subsequent paged calls cheap
|
|
81
84
|
|
|
82
85
|
---
|
|
83
86
|
|
package/dist/index.js
CHANGED
|
@@ -35,7 +35,6 @@ const dropEnabled = getServerConfig().dataframeDropEnabled;
|
|
|
35
35
|
await createApp({
|
|
36
36
|
name: 'secedgar-mcp-server',
|
|
37
37
|
title: 'secedgar-mcp-server',
|
|
38
|
-
websiteUrl: 'https://github.com/cyanheads/secedgar-mcp-server',
|
|
39
38
|
tools: [
|
|
40
39
|
companySearchTool,
|
|
41
40
|
searchFilingsTool,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACpG,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6DAA6D,CAAC;AACpG,OAAO,EAAE,gBAAgB,EAAE,MAAM,yDAAyD,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,6DAA6D,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,MAAM,2DAA2D,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,mDAAmD,CAAC;AAClF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAC1F,OAAO,EAAE,0BAA0B,EAAE,MAAM,iEAAiE,CAAC;AAC7G,OAAO,EAAE,4BAA4B,EAAE,MAAM,mEAAmE,CAAC;AACjH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAC1F,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,4EAA4E;AAC5E,4EAA4E;AAC5E,0EAA0E;AAC1E,oEAAoE;AACpE,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,QAAQ,CAAC;AAE9C,6EAA6E;AAC7E,8EAA8E;AAC9E,gBAAgB;AAChB,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC,oBAAoB,CAAC;AAE3D,MAAM,SAAS,CAAC;IACd,IAAI,EAAE,qBAAqB;IAC3B,KAAK,EAAE,qBAAqB;IAC5B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"company-search.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/company-search.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"company-search.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/company-search.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAY,MAAM,+BAA+B,CAAC;AAoB3E,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6Q5B,CAAC"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @module mcp-server/tools/definitions/company-search
|
|
5
5
|
*/
|
|
6
6
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
7
|
-
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
|
+
import { JsonRpcErrorCode, McpError } from '@cyanheads/mcp-ts-core/errors';
|
|
8
8
|
import { getEdgarApiService, suggestCompanies } from '../../../services/edgar/edgar-api-service.js';
|
|
9
9
|
/** Format SEC's MMDD fiscal year end string as MM-DD (e.g., "0926" → "09-26"). */
|
|
10
10
|
function formatFiscalYearEnd(raw) {
|
|
@@ -42,7 +42,8 @@ export const companySearchTool = tool('secedgar_company_search', {
|
|
|
42
42
|
input: z.object({
|
|
43
43
|
query: z
|
|
44
44
|
.string()
|
|
45
|
-
.
|
|
45
|
+
.trim()
|
|
46
|
+
.min(1, 'Query cannot be blank')
|
|
46
47
|
.describe('Company ticker symbol (e.g., "AAPL", "VOO"), name (e.g., "Apple"), or CIK number (e.g., "320193"). Ticker is the fastest lookup and works for equities, ETFs, and mutual funds. Name search matches current and former names.'),
|
|
47
48
|
include_filings: z
|
|
48
49
|
.boolean()
|
|
@@ -142,7 +143,27 @@ export const companySearchTool = tool('secedgar_company_search', {
|
|
|
142
143
|
...ctx.recoveryFor('no_match'),
|
|
143
144
|
});
|
|
144
145
|
}
|
|
145
|
-
|
|
146
|
+
// Bare-CIK fallback: resolveCik returns { cik } with no name/ticker when a numeric
|
|
147
|
+
// query missed the ticker cache — getSubmissions 404s for non-existent CIKs (#55).
|
|
148
|
+
// For cache-hit matches (name or ticker present), a 404 signals an EDGAR-side
|
|
149
|
+
// problem and must propagate unchanged.
|
|
150
|
+
const isBareCikFallback = !match.name && !match.ticker;
|
|
151
|
+
let submissions;
|
|
152
|
+
try {
|
|
153
|
+
submissions = await api.getSubmissions(match.cik);
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
if (isBareCikFallback && err instanceof McpError && err.code === JsonRpcErrorCode.NotFound) {
|
|
157
|
+
ctx.log.debug('CIK not found in EDGAR submissions', {
|
|
158
|
+
cik: match.cik,
|
|
159
|
+
query: input.query,
|
|
160
|
+
});
|
|
161
|
+
throw ctx.fail('no_match', `No company found for '${input.query}'.`, {
|
|
162
|
+
...ctx.recoveryFor('no_match'),
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
throw err;
|
|
166
|
+
}
|
|
146
167
|
ctx.log.info('Company resolved', {
|
|
147
168
|
query: input.query,
|
|
148
169
|
cik: match.cik,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"company-search.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/company-search.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"company-search.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/company-search.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataframe-query.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/dataframe-query.tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"dataframe-query.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/dataframe-query.tool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6K7B,CAAC"}
|
|
@@ -53,6 +53,7 @@ export const dataframeQueryTool = tool('secedgar_dataframe_query', {
|
|
|
53
53
|
.describe('Single-statement SELECT against df_<id> tables on the shared canvas. Standard DuckDB SQL — joins, aggregates, window functions, CTEs all supported. Reference dataframes by the names returned in fetch/search responses or listed by secedgar_dataframe_describe. BIGINT columns (e.g., XBRL `value`, COUNT/SUM results) serialize as JSON strings to preserve precision past 2^53 — CAST(col AS DOUBLE) in projections for inline arithmetic.'),
|
|
54
54
|
register_as: z
|
|
55
55
|
.string()
|
|
56
|
+
.regex(/^df_[A-Z0-9]{5}_[A-Z0-9]{5}$/, 'register_as must match df_XXXXX_XXXXX (uppercase letters and digits, exactly 5 characters each segment).')
|
|
56
57
|
.optional()
|
|
57
58
|
.describe('When set, persist the result as a new dataframe under this name (must match df_XXXXX_XXXXX shape, or pass a fresh df_<id> generated by the agent). Fresh TTL window — not inherited from the parents in the SELECT. Use to chain analyses without re-running the source SQL.'),
|
|
58
59
|
preview: z
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataframe-query.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/dataframe-query.tool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dataframe-query.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/dataframe-query.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,8 @@ export declare const getFilingTool: import("@cyanheads/mcp-ts-core").ToolDefinit
|
|
|
10
10
|
content_limit: z.ZodDefault<z.ZodNumber>;
|
|
11
11
|
document: z.ZodOptional<z.ZodString>;
|
|
12
12
|
include_xbrl: z.ZodDefault<z.ZodBoolean>;
|
|
13
|
+
offset: z.ZodDefault<z.ZodNumber>;
|
|
14
|
+
section: z.ZodOptional<z.ZodString>;
|
|
13
15
|
}, z.core.$strip>, z.ZodObject<{
|
|
14
16
|
accession_number: z.ZodString;
|
|
15
17
|
form: z.ZodOptional<z.ZodString>;
|
|
@@ -48,6 +50,11 @@ export declare const getFilingTool: import("@cyanheads/mcp-ts-core").ToolDefinit
|
|
|
48
50
|
content: z.ZodString;
|
|
49
51
|
content_truncated: z.ZodBoolean;
|
|
50
52
|
content_total_length: z.ZodNumber;
|
|
53
|
+
next_offset: z.ZodOptional<z.ZodNumber>;
|
|
54
|
+
outline: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
55
|
+
heading: z.ZodString;
|
|
56
|
+
offset: z.ZodNumber;
|
|
57
|
+
}, z.core.$strip>>>;
|
|
51
58
|
filing_url: z.ZodString;
|
|
52
59
|
}, z.core.$strip>, readonly [{
|
|
53
60
|
readonly reason: "document_not_found";
|
|
@@ -64,5 +71,15 @@ export declare const getFilingTool: import("@cyanheads/mcp-ts-core").ToolDefinit
|
|
|
64
71
|
readonly code: JsonRpcErrorCode.NotFound;
|
|
65
72
|
readonly when: "No filing matches the accession number under any candidate CIK";
|
|
66
73
|
readonly recovery: "Verify the accession number and pass the company CIK explicitly.";
|
|
74
|
+
}, {
|
|
75
|
+
readonly reason: "offset_out_of_range";
|
|
76
|
+
readonly code: JsonRpcErrorCode.ValidationError;
|
|
77
|
+
readonly when: "The provided offset is at or beyond the end of the document";
|
|
78
|
+
readonly recovery: "Use an offset less than the total document length shown in the error message.";
|
|
79
|
+
}, {
|
|
80
|
+
readonly reason: "section_not_found";
|
|
81
|
+
readonly code: JsonRpcErrorCode.NotFound;
|
|
82
|
+
readonly when: "The section string did not match any detected heading in the document";
|
|
83
|
+
readonly recovery: "Pick a heading from the outline in error data, or use offset paging instead.";
|
|
67
84
|
}], undefined>;
|
|
68
85
|
//# sourceMappingURL=get-filing.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-filing.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-filing.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"get-filing.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-filing.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AA4EjE,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAwYxB,CAAC"}
|
|
@@ -5,8 +5,10 @@
|
|
|
5
5
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
6
6
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
7
7
|
import { getEdgarApiService } from '../../../services/edgar/edgar-api-service.js';
|
|
8
|
-
import {
|
|
8
|
+
import { detectHeadings, filingToExtract, getExtractCache, setExtractCache, windowText, } from '../../../services/edgar/filing-to-text.js';
|
|
9
9
|
const MAX_DOCUMENTS_IN_FORMAT = 10;
|
|
10
|
+
/** Sentinel key suffix when no specific document is requested (primary document path). */
|
|
11
|
+
const PRIMARY_SENTINEL = '\x00primary';
|
|
10
12
|
const documentEntrySchema = z
|
|
11
13
|
.object({
|
|
12
14
|
name: z.string().describe('Document filename within the filing archive.'),
|
|
@@ -21,7 +23,7 @@ const documentEntrySchema = z
|
|
|
21
23
|
})
|
|
22
24
|
.describe('One document entry from the filing.');
|
|
23
25
|
export const getFilingTool = tool('secedgar_get_filing', {
|
|
24
|
-
description: "Fetch a specific filing's metadata and document content by accession number. Returns the primary document as readable text,
|
|
26
|
+
description: "Fetch a specific filing's metadata and document content by accession number. Returns the primary document as readable text. Use offset/next_offset for multi-page access to large filings (10-K, S-1 can exceed 1M chars): pass the next_offset from a truncated response to read the next page. Use section to jump directly to a heading (e.g. 'risk factors', 'item 7') without needing an offset.",
|
|
25
27
|
annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
|
|
26
28
|
errors: [
|
|
27
29
|
{
|
|
@@ -42,6 +44,18 @@ export const getFilingTool = tool('secedgar_get_filing', {
|
|
|
42
44
|
when: 'No filing matches the accession number under any candidate CIK',
|
|
43
45
|
recovery: 'Verify the accession number and pass the company CIK explicitly.',
|
|
44
46
|
},
|
|
47
|
+
{
|
|
48
|
+
reason: 'offset_out_of_range',
|
|
49
|
+
code: JsonRpcErrorCode.ValidationError,
|
|
50
|
+
when: 'The provided offset is at or beyond the end of the document',
|
|
51
|
+
recovery: 'Use an offset less than the total document length shown in the error message.',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
reason: 'section_not_found',
|
|
55
|
+
code: JsonRpcErrorCode.NotFound,
|
|
56
|
+
when: 'The section string did not match any detected heading in the document',
|
|
57
|
+
recovery: 'Pick a heading from the outline in error data, or use offset paging instead.',
|
|
58
|
+
},
|
|
45
59
|
],
|
|
46
60
|
input: z.object({
|
|
47
61
|
accession_number: z
|
|
@@ -57,7 +71,7 @@ export const getFilingTool = tool('secedgar_get_filing', {
|
|
|
57
71
|
.min(1000)
|
|
58
72
|
.max(200000)
|
|
59
73
|
.default(50000)
|
|
60
|
-
.describe('Maximum characters of document text to return. 10-K filings can exceed 500,000 characters. Default 50,000 captures ~12,000 words (typically business overview, risk factors, and MD&A). Increase to 200,000 for full financial statements, or decrease for quick summaries.'),
|
|
74
|
+
.describe('Maximum characters of document text to return per page. 10-K filings can exceed 500,000 characters; S-1/A can exceed 1,000,000. Default 50,000 captures ~12,000 words (typically business overview, risk factors, and MD&A). Increase to 200,000 for full financial statements, or decrease for quick summaries. Use offset or section for subsequent pages.'),
|
|
61
75
|
document: z
|
|
62
76
|
.string()
|
|
63
77
|
.optional()
|
|
@@ -66,6 +80,17 @@ export const getFilingTool = tool('secedgar_get_filing', {
|
|
|
66
80
|
.boolean()
|
|
67
81
|
.default(false)
|
|
68
82
|
.describe('Include XBRL viewer artifacts and machine-readable taxonomy files (R*.htm fragments, *_cal/_def/_lab/_pre.xml linkbases, *_htm.xml inline instance, *.xsd schemas, MetaLinks.json, FilingSummary.xml, Show.js, report.css, *-xbrl.zip, Financial_Report.xlsx, EX-101.* technical exhibits) under documents.xbrl. Off by default — these dominate filing indexes (~100 entries on a typical 10-K) and are rarely relevant when reading filing content.'),
|
|
83
|
+
offset: z
|
|
84
|
+
.number()
|
|
85
|
+
.int()
|
|
86
|
+
.min(0)
|
|
87
|
+
.default(0)
|
|
88
|
+
.describe('Character offset into the extracted document text. Pass next_offset from a truncated response to continue reading the next page. Default 0 reads from the beginning.'),
|
|
89
|
+
section: z
|
|
90
|
+
.string()
|
|
91
|
+
.min(1)
|
|
92
|
+
.optional()
|
|
93
|
+
.describe("Jump to a named section by case-insensitive substring match against detected headings (e.g. 'risk factors', 'item 7', 'certain relationships'). Takes precedence over offset when both are provided. On a miss, the error data carries the detected outline so you can pick the correct heading."),
|
|
69
94
|
}),
|
|
70
95
|
output: z.object({
|
|
71
96
|
accession_number: z.string().describe('Filing accession number, normalized to dash format.'),
|
|
@@ -110,57 +135,130 @@ export const getFilingTool = tool('secedgar_get_filing', {
|
|
|
110
135
|
.describe('XBRL viewer artifacts and machine-readable taxonomy files. Only present when include_xbrl=true.'),
|
|
111
136
|
})
|
|
112
137
|
.describe('Filing documents grouped by category. Names from any list are valid values for the document input. XBRL viewer artifacts are suppressed by default; setting include_xbrl=true surfaces them under the xbrl bucket.'),
|
|
113
|
-
content: z.string().describe('Document text content
|
|
114
|
-
content_truncated: z.boolean().describe('True if content was truncated.'),
|
|
115
|
-
content_total_length: z.number().describe('Full document length before truncation.'),
|
|
138
|
+
content: z.string().describe('Document text content for this page window.'),
|
|
139
|
+
content_truncated: z.boolean().describe('True if content was truncated at content_limit.'),
|
|
140
|
+
content_total_length: z.number().describe('Full document length before any truncation.'),
|
|
141
|
+
next_offset: z
|
|
142
|
+
.number()
|
|
143
|
+
.optional()
|
|
144
|
+
.describe('Character offset to pass as offset on the next call to continue reading. Only present when the response was truncated. Calling agents should follow this until content_truncated is false.'),
|
|
145
|
+
outline: z
|
|
146
|
+
.array(z
|
|
147
|
+
.object({
|
|
148
|
+
heading: z.string().describe('Detected heading text.'),
|
|
149
|
+
offset: z
|
|
150
|
+
.number()
|
|
151
|
+
.describe('Character offset of this heading in the full document. Pass as offset to jump directly to this section.'),
|
|
152
|
+
})
|
|
153
|
+
.describe('One detected heading with its offset.'))
|
|
154
|
+
.optional()
|
|
155
|
+
.describe('Document outline — detected headings with their character offsets. Present on the first page of a truncated response (offset=0, no section). Use a heading offset as offset, or pass heading text as section, to jump to that section.'),
|
|
116
156
|
filing_url: z.string().describe('Direct URL to the filing on SEC.gov.'),
|
|
117
157
|
}),
|
|
118
158
|
async handler(input, ctx) {
|
|
119
159
|
const api = getEdgarApiService();
|
|
120
160
|
const accn = normalizeAccessionNumber(input.accession_number);
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
161
|
+
const documentKey = input.document ?? PRIMARY_SENTINEL;
|
|
162
|
+
const cacheKey = `${accn}:${documentKey}`;
|
|
163
|
+
// If we have a cache hit, skip the document fetch entirely.
|
|
164
|
+
let fullText = getExtractCache(cacheKey);
|
|
165
|
+
let resolvedCik;
|
|
166
|
+
let index;
|
|
167
|
+
let targetName;
|
|
168
|
+
let filingPrimaryName;
|
|
169
|
+
if (fullText === undefined) {
|
|
170
|
+
// Cache miss — fetch, convert, and cache.
|
|
171
|
+
const resolved = await resolveFilingArchive(api, accn, input.cik, input.document);
|
|
172
|
+
if (!resolved.ok) {
|
|
173
|
+
if (resolved.kind === 'document_not_found') {
|
|
174
|
+
const primaryName = resolved.documents.primary[0]?.name;
|
|
175
|
+
const hint = primaryName
|
|
176
|
+
? `Use document="${primaryName}" (the primary) or pick from documents.primary/exhibits in error data.`
|
|
177
|
+
: 'Pick a filename from documents.primary or exhibits in error data.';
|
|
178
|
+
throw ctx.fail('document_not_found', `Document '${resolved.requestedDocument}' not found in this filing.`, {
|
|
179
|
+
requested_document: resolved.requestedDocument,
|
|
180
|
+
documents: resolved.documents,
|
|
181
|
+
recovery: { hint },
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
if (resolved.kind === 'no_documents') {
|
|
185
|
+
throw ctx.fail('no_documents', `No primary document found in filing ${accn}.`, {
|
|
186
|
+
accession_number: accn,
|
|
187
|
+
documents: resolved.documents,
|
|
188
|
+
recovery: {
|
|
189
|
+
hint: 'Specify the document input using a filename from documents.primary in error data.',
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
const cikSuffix = resolved.providedCik
|
|
194
|
+
? ` (CIK ${resolved.providedCik.padStart(10, '0')})`
|
|
195
|
+
: '';
|
|
196
|
+
const recoveryHint = resolved.providedCik
|
|
197
|
+
? 'Verify the accession number and CIK are correct.'
|
|
198
|
+
: 'Verify the accession number and pass the company CIK explicitly.';
|
|
199
|
+
throw ctx.fail('filing_not_found', `Filing '${accn}' not found${cikSuffix}.`, {
|
|
200
|
+
accession_number: accn,
|
|
201
|
+
cik: resolved.providedCik,
|
|
202
|
+
recovery: { hint: recoveryHint },
|
|
132
203
|
});
|
|
133
204
|
}
|
|
134
|
-
|
|
135
|
-
|
|
205
|
+
resolvedCik = resolved.cik;
|
|
206
|
+
index = resolved.index;
|
|
207
|
+
targetName = resolved.targetName;
|
|
208
|
+
filingPrimaryName = resolved.filingPrimaryName;
|
|
209
|
+
fullText = filingToExtract(resolved.html);
|
|
210
|
+
setExtractCache(cacheKey, fullText);
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
// Cache hit — still need metadata. Re-resolve the index (no document body fetch).
|
|
214
|
+
// A resolution failure here is a real failure (EDGAR index unavailable or the
|
|
215
|
+
// filing gone): fail honestly rather than fabricating placeholder metadata.
|
|
216
|
+
const metaResolved = await resolveFilingMeta(api, accn, input.cik, input.document);
|
|
217
|
+
if (!metaResolved.ok) {
|
|
218
|
+
throw ctx.fail('filing_not_found', `Filing '${accn}' could not be resolved.`, {
|
|
136
219
|
accession_number: accn,
|
|
137
|
-
|
|
138
|
-
recovery: {
|
|
139
|
-
hint: 'Specify the document input using a filename from documents.primary in error data.',
|
|
140
|
-
},
|
|
220
|
+
cik: input.cik,
|
|
221
|
+
recovery: { hint: 'Verify the accession number and pass the company CIK explicitly.' },
|
|
141
222
|
});
|
|
142
223
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
224
|
+
resolvedCik = metaResolved.cik;
|
|
225
|
+
index = metaResolved.index;
|
|
226
|
+
targetName = metaResolved.targetName;
|
|
227
|
+
filingPrimaryName = metaResolved.filingPrimaryName;
|
|
228
|
+
}
|
|
229
|
+
// Determine effective offset (section wins over raw offset)
|
|
230
|
+
let effectiveOffset = input.offset ?? 0;
|
|
231
|
+
if (input.section) {
|
|
232
|
+
const headings = detectHeadings(fullText, 50);
|
|
233
|
+
const needle = input.section.toLowerCase();
|
|
234
|
+
const match = headings.find((h) => h.heading.toLowerCase().includes(needle));
|
|
235
|
+
if (!match) {
|
|
236
|
+
throw ctx.fail('section_not_found', `Section '${input.section}' not found in this document.`, {
|
|
237
|
+
section: input.section,
|
|
238
|
+
outline: headings,
|
|
239
|
+
...ctx.recoveryFor('section_not_found'),
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
effectiveOffset = match.offset;
|
|
243
|
+
}
|
|
244
|
+
// Validate offset
|
|
245
|
+
if (effectiveOffset >= fullText.length && fullText.length > 0) {
|
|
246
|
+
throw ctx.fail('offset_out_of_range', `Offset ${effectiveOffset} is beyond the end of this document (total length: ${fullText.length}).`, {
|
|
247
|
+
offset: effectiveOffset,
|
|
248
|
+
content_total_length: fullText.length,
|
|
249
|
+
...ctx.recoveryFor('offset_out_of_range'),
|
|
153
250
|
});
|
|
154
251
|
}
|
|
155
|
-
const {
|
|
156
|
-
|
|
157
|
-
const
|
|
252
|
+
const { text, truncated, totalLength, nextOffset } = windowText(fullText, effectiveOffset, input.content_limit);
|
|
253
|
+
// Emit outline on first-page truncated responses (not on subsequent pages or section jumps)
|
|
254
|
+
const shouldEmitOutline = truncated && effectiveOffset === 0 && !input.section;
|
|
255
|
+
const outline = shouldEmitOutline ? detectHeadings(fullText, 50) : undefined;
|
|
158
256
|
// Parallelize: submissions metadata (recent-window enrichment) and submission
|
|
159
257
|
// headers (canonical document types). Headers are best-effort — categorization
|
|
160
258
|
// falls back to name-pattern inference when absent.
|
|
161
259
|
const [submissions, headers] = await Promise.all([
|
|
162
|
-
api.getSubmissions(
|
|
163
|
-
api.tryGetFilingHeaders(
|
|
260
|
+
api.getSubmissions(resolvedCik),
|
|
261
|
+
api.tryGetFilingHeaders(resolvedCik, accn),
|
|
164
262
|
]);
|
|
165
263
|
const documents = categorizeDocuments(index.directory.item, filingPrimaryName, headers, input.include_xbrl);
|
|
166
264
|
// Enrich with metadata from the recent-submissions window — not every accession lands here
|
|
@@ -172,18 +270,20 @@ export const getFilingTool = tool('secedgar_get_filing', {
|
|
|
172
270
|
const periodEnding = idx >= 0 ? submissions.filings.recent.reportDate[idx] || undefined : undefined;
|
|
173
271
|
ctx.log.info('Filing retrieved', {
|
|
174
272
|
accessionNumber: accn,
|
|
175
|
-
cik,
|
|
273
|
+
cik: resolvedCik,
|
|
176
274
|
contentLength: totalLength,
|
|
275
|
+
offset: effectiveOffset,
|
|
177
276
|
inRecentWindow: idx >= 0,
|
|
178
277
|
headersResolved: headers !== null,
|
|
179
278
|
});
|
|
279
|
+
const accnNoDashes = accn.replace(/-/g, '');
|
|
180
280
|
const requestedDocument = input.document && input.document !== filingPrimaryName ? input.document : undefined;
|
|
181
281
|
return {
|
|
182
282
|
accession_number: accn,
|
|
183
283
|
form: form || undefined,
|
|
184
284
|
filing_date: filingDate || undefined,
|
|
185
285
|
company_name: submissions.name || undefined,
|
|
186
|
-
cik,
|
|
286
|
+
cik: resolvedCik,
|
|
187
287
|
period_ending: periodEnding,
|
|
188
288
|
primary_document: filingPrimaryName,
|
|
189
289
|
requested_document: requestedDocument,
|
|
@@ -191,7 +291,9 @@ export const getFilingTool = tool('secedgar_get_filing', {
|
|
|
191
291
|
content: text,
|
|
192
292
|
content_truncated: truncated,
|
|
193
293
|
content_total_length: totalLength,
|
|
194
|
-
|
|
294
|
+
next_offset: nextOffset,
|
|
295
|
+
outline,
|
|
296
|
+
filing_url: `https://www.sec.gov/Archives/edgar/data/${resolvedCik}/${accnNoDashes}/${targetName}`,
|
|
195
297
|
};
|
|
196
298
|
},
|
|
197
299
|
format: (result) => {
|
|
@@ -204,11 +306,20 @@ export const getFilingTool = tool('secedgar_get_filing', {
|
|
|
204
306
|
const docLabel = result.requested_document
|
|
205
307
|
? `Primary: ${result.primary_document} | Requested: ${result.requested_document}`
|
|
206
308
|
: `Primary: ${result.primary_document}`;
|
|
207
|
-
const
|
|
309
|
+
const truncatedNote = result.content_truncated
|
|
310
|
+
? ` (truncated, next_offset: ${result.next_offset ?? '?'})`
|
|
311
|
+
: '';
|
|
312
|
+
const meta = `Accession: ${result.accession_number} | ${docLabel} | ${result.content_total_length} chars${truncatedNote}`;
|
|
208
313
|
const docs = formatDocumentSection(result.documents);
|
|
314
|
+
const outlineText = result.outline && result.outline.length > 0
|
|
315
|
+
? `\n\nOutline:\n${result.outline.map((h) => ` [${h.offset}] ${h.heading}`).join('\n')}`
|
|
316
|
+
: '';
|
|
209
317
|
const url = `\nURL: ${result.filing_url}`;
|
|
210
318
|
return [
|
|
211
|
-
{
|
|
319
|
+
{
|
|
320
|
+
type: 'text',
|
|
321
|
+
text: `${header}\n${dateLine}\n${meta}${docs}${outlineText}${url}\n\n${result.content}`,
|
|
322
|
+
},
|
|
212
323
|
];
|
|
213
324
|
},
|
|
214
325
|
});
|
|
@@ -223,6 +334,10 @@ function normalizeAccessionNumber(input) {
|
|
|
223
334
|
}
|
|
224
335
|
return cleaned;
|
|
225
336
|
}
|
|
337
|
+
/**
|
|
338
|
+
* Resolve filing archive: fetch index + primary document HTML.
|
|
339
|
+
* Used on cache misses to get both the document content and index metadata.
|
|
340
|
+
*/
|
|
226
341
|
async function resolveFilingArchive(api, accessionNumber, providedCik, requestedDocument) {
|
|
227
342
|
const candidateCiks = await resolveCandidateCiks(api, accessionNumber, providedCik);
|
|
228
343
|
let lastIndexedItems = [];
|
|
@@ -256,6 +371,27 @@ async function resolveFilingArchive(api, accessionNumber, providedCik, requested
|
|
|
256
371
|
}
|
|
257
372
|
return { ok: false, kind: 'no_documents', documents };
|
|
258
373
|
}
|
|
374
|
+
/**
|
|
375
|
+
* Resolve filing index and document names WITHOUT fetching the document body.
|
|
376
|
+
* Used on cache hits to get metadata while skipping the expensive document fetch.
|
|
377
|
+
*/
|
|
378
|
+
async function resolveFilingMeta(api, accessionNumber, providedCik, requestedDocument) {
|
|
379
|
+
const candidateCiks = await resolveCandidateCiks(api, accessionNumber, providedCik);
|
|
380
|
+
for (const cik of candidateCiks) {
|
|
381
|
+
const index = await api.tryGetFilingIndex(cik, accessionNumber);
|
|
382
|
+
if (!index)
|
|
383
|
+
continue;
|
|
384
|
+
const items = index.directory.item;
|
|
385
|
+
const filingPrimaryName = findPrimaryDocument(items);
|
|
386
|
+
if (!filingPrimaryName)
|
|
387
|
+
continue;
|
|
388
|
+
const targetName = requestedDocument ?? filingPrimaryName;
|
|
389
|
+
if (!items.some((item) => item.name === targetName))
|
|
390
|
+
continue;
|
|
391
|
+
return { ok: true, cik, index, targetName, filingPrimaryName };
|
|
392
|
+
}
|
|
393
|
+
return { ok: false };
|
|
394
|
+
}
|
|
259
395
|
async function resolveCandidateCiks(api, accessionNumber, providedCik) {
|
|
260
396
|
if (providedCik)
|
|
261
397
|
return [providedCik.padStart(10, '0')];
|