@cyanheads/secedgar-mcp-server 0.15.13 → 0.15.15

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.
Files changed (109) hide show
  1. package/AGENTS.md +8 -6
  2. package/CLAUDE.md +8 -6
  3. package/Dockerfile +3 -3
  4. package/README.md +8 -5
  5. package/changelog/0.15.x/0.15.14.md +31 -0
  6. package/changelog/0.15.x/0.15.15.md +24 -0
  7. package/dist/index.js +7 -5
  8. package/dist/index.js.map +1 -1
  9. package/dist/mcp-server/tools/definitions/company-search.tool.d.ts +2 -2
  10. package/dist/mcp-server/tools/definitions/company-search.tool.d.ts.map +1 -1
  11. package/dist/mcp-server/tools/definitions/company-search.tool.js +8 -10
  12. package/dist/mcp-server/tools/definitions/company-search.tool.js.map +1 -1
  13. package/dist/mcp-server/tools/definitions/compare-companies.tool.d.ts +2 -2
  14. package/dist/mcp-server/tools/definitions/compare-companies.tool.d.ts.map +1 -1
  15. package/dist/mcp-server/tools/definitions/compare-companies.tool.js +6 -4
  16. package/dist/mcp-server/tools/definitions/compare-companies.tool.js.map +1 -1
  17. package/dist/mcp-server/tools/definitions/dataframe-describe.tool.d.ts +1 -1
  18. package/dist/mcp-server/tools/definitions/dataframe-describe.tool.d.ts.map +1 -1
  19. package/dist/mcp-server/tools/definitions/dataframe-describe.tool.js +1 -1
  20. package/dist/mcp-server/tools/definitions/dataframe-describe.tool.js.map +1 -1
  21. package/dist/mcp-server/tools/definitions/dataframe-drop.tool.d.ts +1 -1
  22. package/dist/mcp-server/tools/definitions/dataframe-drop.tool.d.ts.map +1 -1
  23. package/dist/mcp-server/tools/definitions/dataframe-drop.tool.js +1 -1
  24. package/dist/mcp-server/tools/definitions/dataframe-drop.tool.js.map +1 -1
  25. package/dist/mcp-server/tools/definitions/dataframe-query.tool.d.ts +1 -1
  26. package/dist/mcp-server/tools/definitions/dataframe-query.tool.d.ts.map +1 -1
  27. package/dist/mcp-server/tools/definitions/dataframe-query.tool.js +1 -1
  28. package/dist/mcp-server/tools/definitions/dataframe-query.tool.js.map +1 -1
  29. package/dist/mcp-server/tools/definitions/fetch-frames.tool.d.ts +2 -2
  30. package/dist/mcp-server/tools/definitions/fetch-frames.tool.d.ts.map +1 -1
  31. package/dist/mcp-server/tools/definitions/fetch-frames.tool.js +6 -4
  32. package/dist/mcp-server/tools/definitions/fetch-frames.tool.js.map +1 -1
  33. package/dist/mcp-server/tools/definitions/find-holders.tool.d.ts +2 -2
  34. package/dist/mcp-server/tools/definitions/find-holders.tool.d.ts.map +1 -1
  35. package/dist/mcp-server/tools/definitions/find-holders.tool.js +35 -23
  36. package/dist/mcp-server/tools/definitions/find-holders.tool.js.map +1 -1
  37. package/dist/mcp-server/tools/definitions/get-beneficial-owners.tool.d.ts +15 -5
  38. package/dist/mcp-server/tools/definitions/get-beneficial-owners.tool.d.ts.map +1 -1
  39. package/dist/mcp-server/tools/definitions/get-beneficial-owners.tool.js +92 -35
  40. package/dist/mcp-server/tools/definitions/get-beneficial-owners.tool.js.map +1 -1
  41. package/dist/mcp-server/tools/definitions/get-filing.tool.d.ts +2 -2
  42. package/dist/mcp-server/tools/definitions/get-filing.tool.d.ts.map +1 -1
  43. package/dist/mcp-server/tools/definitions/get-filing.tool.js +59 -33
  44. package/dist/mcp-server/tools/definitions/get-filing.tool.js.map +1 -1
  45. package/dist/mcp-server/tools/definitions/get-financials.tool.d.ts +2 -2
  46. package/dist/mcp-server/tools/definitions/get-financials.tool.d.ts.map +1 -1
  47. package/dist/mcp-server/tools/definitions/get-financials.tool.js +11 -8
  48. package/dist/mcp-server/tools/definitions/get-financials.tool.js.map +1 -1
  49. package/dist/mcp-server/tools/definitions/get-fund-holdings.tool.d.ts +2 -2
  50. package/dist/mcp-server/tools/definitions/get-fund-holdings.tool.d.ts.map +1 -1
  51. package/dist/mcp-server/tools/definitions/get-fund-holdings.tool.js +27 -27
  52. package/dist/mcp-server/tools/definitions/get-fund-holdings.tool.js.map +1 -1
  53. package/dist/mcp-server/tools/definitions/get-insider-transactions.tool.d.ts +2 -2
  54. package/dist/mcp-server/tools/definitions/get-insider-transactions.tool.d.ts.map +1 -1
  55. package/dist/mcp-server/tools/definitions/get-insider-transactions.tool.js +12 -16
  56. package/dist/mcp-server/tools/definitions/get-insider-transactions.tool.js.map +1 -1
  57. package/dist/mcp-server/tools/definitions/get-institutional-holdings.tool.d.ts +21 -2
  58. package/dist/mcp-server/tools/definitions/get-institutional-holdings.tool.d.ts.map +1 -1
  59. package/dist/mcp-server/tools/definitions/get-institutional-holdings.tool.js +153 -37
  60. package/dist/mcp-server/tools/definitions/get-institutional-holdings.tool.js.map +1 -1
  61. package/dist/mcp-server/tools/definitions/get-material-events.tool.d.ts +2 -2
  62. package/dist/mcp-server/tools/definitions/get-material-events.tool.d.ts.map +1 -1
  63. package/dist/mcp-server/tools/definitions/get-material-events.tool.js +8 -10
  64. package/dist/mcp-server/tools/definitions/get-material-events.tool.js.map +1 -1
  65. package/dist/mcp-server/tools/definitions/get-snapshot.tool.d.ts +2 -2
  66. package/dist/mcp-server/tools/definitions/get-snapshot.tool.d.ts.map +1 -1
  67. package/dist/mcp-server/tools/definitions/get-snapshot.tool.js +6 -4
  68. package/dist/mcp-server/tools/definitions/get-snapshot.tool.js.map +1 -1
  69. package/dist/mcp-server/tools/definitions/index.d.ts +597 -572
  70. package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -1
  71. package/dist/mcp-server/tools/definitions/search-filings.tool.d.ts +3 -8
  72. package/dist/mcp-server/tools/definitions/search-filings.tool.d.ts.map +1 -1
  73. package/dist/mcp-server/tools/definitions/search-filings.tool.js +117 -59
  74. package/dist/mcp-server/tools/definitions/search-filings.tool.js.map +1 -1
  75. package/dist/mcp-server/tools/fixed-point.d.ts +7 -0
  76. package/dist/mcp-server/tools/fixed-point.d.ts.map +1 -0
  77. package/dist/mcp-server/tools/fixed-point.js +28 -0
  78. package/dist/mcp-server/tools/fixed-point.js.map +1 -0
  79. package/dist/services/edgar/call-scope.d.ts +41 -0
  80. package/dist/services/edgar/call-scope.d.ts.map +1 -0
  81. package/dist/services/edgar/call-scope.js +53 -0
  82. package/dist/services/edgar/call-scope.js.map +1 -0
  83. package/dist/services/edgar/concept-series.d.ts.map +1 -1
  84. package/dist/services/edgar/concept-series.js +5 -1
  85. package/dist/services/edgar/concept-series.js.map +1 -1
  86. package/dist/services/edgar/edgar-api-service.d.ts +80 -50
  87. package/dist/services/edgar/edgar-api-service.d.ts.map +1 -1
  88. package/dist/services/edgar/edgar-api-service.js +483 -211
  89. package/dist/services/edgar/edgar-api-service.js.map +1 -1
  90. package/dist/services/edgar/filing-to-text.d.ts +53 -14
  91. package/dist/services/edgar/filing-to-text.d.ts.map +1 -1
  92. package/dist/services/edgar/filing-to-text.js +181 -33
  93. package/dist/services/edgar/filing-to-text.js.map +1 -1
  94. package/dist/services/edgar/nport-parser.js +1 -1
  95. package/dist/services/edgar/nport-parser.js.map +1 -1
  96. package/dist/services/edgar/ownership-parser.d.ts +2 -0
  97. package/dist/services/edgar/ownership-parser.d.ts.map +1 -1
  98. package/dist/services/edgar/ownership-parser.js +4 -0
  99. package/dist/services/edgar/ownership-parser.js.map +1 -1
  100. package/dist/services/edgar/same-cik.d.ts +7 -0
  101. package/dist/services/edgar/same-cik.d.ts.map +1 -0
  102. package/dist/services/edgar/same-cik.js +9 -0
  103. package/dist/services/edgar/same-cik.js.map +1 -0
  104. package/dist/services/edgar/submissions-archive.d.ts +6 -3
  105. package/dist/services/edgar/submissions-archive.d.ts.map +1 -1
  106. package/dist/services/edgar/submissions-archive.js +6 -3
  107. package/dist/services/edgar/submissions-archive.js.map +1 -1
  108. package/package.json +6 -6
  109. package/server.json +3 -3
@@ -4,16 +4,17 @@
4
4
  * ownership triangle alongside secedgar_get_insider_transactions (Form 4 officers and
5
5
  * directors) and secedgar_get_institutional_holdings (13F portfolios): this tool covers the
6
6
  * 5%-and-over stakes, activist and passive. Discovery runs off the issuer's own submissions
7
- * feed — SEC cross-lists a 13D/G under every CIK party to it, so the issuer's history
8
- * already carries the filings made about it and the archive document is reachable on the
9
- * issuer's own path.
7
+ * feed — SEC cross-lists a 13D/G under every CIK party to it. Each document's issuer CIK
8
+ * must therefore match before its ownership is attributed to the requested company.
10
9
  * @module mcp-server/tools/definitions/get-beneficial-owners
11
10
  */
12
11
  import { tool, z } from '@cyanheads/mcp-ts-core';
13
12
  import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
14
13
  import { dataframeGuidance, getCanvasBridge, toDatasetField, } from '../../../services/canvas-bridge/canvas-bridge.js';
15
14
  import { formNameToSchedule, parseBeneficialOwnershipXml, } from '../../../services/edgar/beneficial-ownership-parser.js';
15
+ import { CallScope } from '../../../services/edgar/call-scope.js';
16
16
  import { getEdgarApiService, rawDocumentName } from '../../../services/edgar/edgar-api-service.js';
17
+ import { sameCik } from '../../../services/edgar/same-cik.js';
17
18
  /**
18
19
  * First filing date on which every beneficial-ownership filing arrived in the structured
19
20
  * format. The legacy `SC 13D` / `SC 13G` names stop dead here: EDGAR full-text search counts
@@ -21,6 +22,10 @@ import { getEdgarApiService, rawDocumentName } from '../../../services/edgar/edg
21
22
  * same day. Filings before it are text or HTML documents with no XML to parse.
22
23
  */
23
24
  const STRUCTURED_FROM = '2024-12-18';
25
+ /** Maximum schedule documents examined in one newest-first scan. */
26
+ const FILING_SCAN_CAP = 50;
27
+ /** Maximum matching filings a caller can request. */
28
+ const FILING_RESULT_CAP = 20;
24
29
  /** Legacy form names that carry the same disclosure with no parseable XML. */
25
30
  const LEGACY_FORMS = ['SC 13D', 'SC 13D/A', 'SC 13G', 'SC 13G/A'];
26
31
  /**
@@ -75,8 +80,8 @@ export const getBeneficialOwnersTool = tool('secedgar_get_beneficial_owners', {
75
80
  {
76
81
  reason: 'sec_unreachable',
77
82
  code: JsonRpcErrorCode.ServiceUnavailable,
78
- when: 'The last of three attempts to reach SEC EDGAR got no HTTP response — the connection failed, or no response headers arrived within 15 seconds',
79
- recovery: 'Retry the same call in a minute — SEC EDGAR could not be reached, and nothing in the request needs to change.',
83
+ when: "SEC EDGAR gave no complete, readable response — on the last attempt made (the third, or an earlier one once this call's 40-second budget for SEC failures ran out) the connection failed, no response headers arrived within 15 seconds, or the body broke off or stalled for 15 seconds, each wait capped at what was left of that budget; a 200 body was not the JSON SEC serves; or earlier SEC failures had spent that budget, so the request was never sent",
84
+ recovery: 'Retry the same call in a minute — SEC EDGAR did not deliver a complete, readable response, and nothing in the request needs to change.',
80
85
  retryable: true,
81
86
  thrownBy: 'service',
82
87
  },
@@ -99,9 +104,9 @@ export const getBeneficialOwnersTool = tool('secedgar_get_beneficial_owners', {
99
104
  .number()
100
105
  .int()
101
106
  .min(1)
102
- .max(20)
107
+ .max(FILING_RESULT_CAP)
103
108
  .default(10)
104
- .describe('Number of filings to fetch and parse, newest first. Each filing is a separate document fetch, so this is the cost of the call as well as its depth. Default 10; a widely-held company can have dozens of blockholder filings a year.'),
109
+ .describe('Number of successfully parsed filings naming the requested issuer to return, newest first. Other-issuer schedules and failed documents do not consume this limit; at most 50 documents are examined. Default 10.'),
105
110
  }),
106
111
  // The company-identifier keys other tools take. `issuer` is this tool's only company
107
112
  // input, so each maps one-to-one (#152).
@@ -115,10 +120,28 @@ export const getBeneficialOwnersTool = tool('secedgar_get_beneficial_owners', {
115
120
  .describe('The schedule filter applied — the requested value, or the default "all".'),
116
121
  total_structured_filings: z
117
122
  .number()
118
- .describe('Structured 13D/13G filings matching form_kind in the recent submissions window, before limit.'),
119
- filings_parsed: z
123
+ .describe('Indexed 13D/13G schedules matching form/amendment filters in the recent submissions window.'),
124
+ filings_parsed: z.number().describe('Matching parsed filings, capped by limit.'),
125
+ filings_examined: z.number().describe('Matches + exclusions + failures; at most 50 documents.'),
126
+ filings_excluded_other_issuer: z
120
127
  .number()
121
- .describe('Filings fetched and parsed: total_structured_filings capped by limit.'),
128
+ .describe('Schedules naming another issuer; no rows returned.'),
129
+ filings_not_examined: z
130
+ .number()
131
+ .describe('Indexed schedules beyond the result limit or 50-document ceiling.'),
132
+ filings_failed: z
133
+ .array(z
134
+ .object({
135
+ accession_number: z.string().describe('Accession to inspect with secedgar_get_filing.'),
136
+ reason: z
137
+ .enum(['document_not_found', 'unparseable'])
138
+ .describe('Document returned 404, or could not be parsed with a usable issuer CIK.'),
139
+ })
140
+ .describe('One failed document.'))
141
+ .describe('Failures in scan order; successes retained.'),
142
+ partial: z
143
+ .boolean()
144
+ .describe('True when filings_failed is nonempty, independently of truncation.'),
122
145
  structured_coverage_from: z
123
146
  .string()
124
147
  .describe('First date SEC required this XML format (YYYY-MM-DD); earlier blockholder filings cannot be parsed here.'),
@@ -221,7 +244,7 @@ export const getBeneficialOwnersTool = tool('secedgar_get_beneficial_owners', {
221
244
  expires_at: z.string().describe('ISO 8601 expiry timestamp.'),
222
245
  truncated: z
223
246
  .boolean()
224
- .describe('True when more structured filings exist than limit fetched.'),
247
+ .describe('True when indexed schedules remain unexamined after the result limit or scan ceiling.'),
225
248
  })
226
249
  .optional()
227
250
  .describe('Dataframe with one row per reporting person across parsed filings; joins insider and 13F dataframes on issuer_cik. Absent when canvas is unavailable or nothing parsed.'),
@@ -230,14 +253,18 @@ export const getBeneficialOwnersTool = tool('secedgar_get_beneficial_owners', {
230
253
  notice: z
231
254
  .string()
232
255
  .optional()
233
- .describe('Guidance when no filings matched, naming the coverage boundary and the fallback.'),
234
- truncated: z.boolean().optional().describe('True when filings were capped by limit.'),
256
+ .describe('Exclusions, document recovery, scan bounds, and dataframe guidance.'),
257
+ truncated: z
258
+ .boolean()
259
+ .optional()
260
+ .describe('True when schedules remain unexamined after the result limit or 50-document ceiling.'),
235
261
  shown: z.number().optional().describe('Number of filings returned.'),
236
- cap: z.number().optional().describe('The limit cap applied.'),
262
+ cap: z.number().optional().describe('Result limit or document ceiling that stopped scanning.'),
237
263
  },
238
264
  async handler(input, ctx) {
239
265
  const api = getEdgarApiService();
240
- const resolved = await api.resolveCik(input.issuer);
266
+ const scope = new CallScope(ctx.signal);
267
+ const resolved = await api.resolveCik(input.issuer, scope);
241
268
  const candidates = Array.isArray(resolved) ? resolved : [resolved];
242
269
  if (candidates.length > 1) {
243
270
  const shown = candidates.slice(0, 10);
@@ -248,7 +275,7 @@ export const getBeneficialOwnersTool = tool('secedgar_get_beneficial_owners', {
248
275
  if (!match) {
249
276
  throw ctx.fail('issuer_not_found', `Issuer '${input.issuer}' not found in EDGAR.`);
250
277
  }
251
- const submissions = await api.getSubmissions(match.cik);
278
+ const submissions = await api.getSubmissions(match.cik, scope);
252
279
  const recent = submissions.filings.recent;
253
280
  // SEC indexes a 13D/G under every CIK party to it, so the issuer's own feed already
254
281
  // carries the schedules filed about it — no entity-scoped search needed.
@@ -269,7 +296,7 @@ export const getBeneficialOwnersTool = tool('secedgar_get_beneficial_owners', {
269
296
  if (!input.include_amendments && form.endsWith('/A'))
270
297
  continue;
271
298
  totalMatching++;
272
- if (selected.length < input.limit) {
299
+ if (selected.length < FILING_SCAN_CAP) {
273
300
  selected.push({
274
301
  form,
275
302
  schedule,
@@ -290,20 +317,32 @@ export const getBeneficialOwnersTool = tool('secedgar_get_beneficial_owners', {
290
317
  legacy_filings_before_coverage: legacyCount,
291
318
  });
292
319
  }
293
- // Fetch and parse each selected filing. A document that 404s or does not parse as a
294
- // schedule is dropped rather than failing the call — one malformed filing must not
295
- // hide every other blockholder in the list.
320
+ // Each examined document has exactly one outcome: matching, other issuer, or failed.
321
+ // Failures and exclusions do not spend the caller's matching-filing limit.
322
+ let examined = 0;
323
+ let otherIssuer = 0;
324
+ const failed = [];
296
325
  const filings = [];
297
326
  for (const ref of selected) {
298
- const xml = await api.tryGetFilingDocument(match.cik, ref.accessionNumber, ref.document);
327
+ if (filings.length >= input.limit)
328
+ break;
329
+ ctx.signal.throwIfAborted();
330
+ const xml = await api.tryGetFilingDocument(match.cik, ref.accessionNumber, ref.document, scope);
331
+ examined++;
299
332
  const parsed = xml ? parseBeneficialOwnershipXml(xml) : undefined;
300
- if (!parsed) {
301
- ctx.log.debug('Skipping unparseable beneficial-ownership filing', {
302
- accessionNumber: ref.accessionNumber,
303
- document: ref.document,
333
+ if (!parsed?.issuer_cik ||
334
+ !/^\d+$/.test(parsed.issuer_cik) ||
335
+ !/[1-9]/.test(parsed.issuer_cik)) {
336
+ failed.push({
337
+ accession_number: ref.accessionNumber,
338
+ reason: xml === null ? 'document_not_found' : 'unparseable',
304
339
  });
305
340
  continue;
306
341
  }
342
+ if (!sameCik(parsed.issuer_cik, match.cik)) {
343
+ otherIssuer++;
344
+ continue;
345
+ }
307
346
  const purpose = clip(parsed.purpose_of_transaction, PURPOSE_MAX_CHARS);
308
347
  filings.push({
309
348
  form: ref.form,
@@ -333,7 +372,8 @@ export const getBeneficialOwnersTool = tool('secedgar_get_beneficial_owners', {
333
372
  })),
334
373
  });
335
374
  }
336
- const truncated = totalMatching > filings.length;
375
+ const notExamined = totalMatching - examined;
376
+ const truncated = notExamined > 0;
337
377
  // One row per reporting person — the grain the ownership question is asked at, and the
338
378
  // grain that joins to the insider and 13F dataframes on issuer_cik.
339
379
  let dataset;
@@ -377,19 +417,27 @@ export const getBeneficialOwnersTool = tool('secedgar_get_beneficial_owners', {
377
417
  if (registered)
378
418
  dataset = { ...toDatasetField(registered), truncated };
379
419
  }
380
- if (filings.length === 0) {
381
- ctx.enrich.notice(`${totalMatching} structured filings are indexed for ${submissions.name}, but none of the ${selected.length} fetched parsed as a SCHEDULE 13D or 13G document. Read one directly with secedgar_get_filing on an accession number from secedgar_search_filings.`);
420
+ const guidance = [];
421
+ if (otherIssuer > 0)
422
+ guidance.push(`${otherIssuer} examined filings name another issuer and contribute no ownership rows.`);
423
+ if (failed.length > 0)
424
+ guidance.push(`${failed.length} documents failed; this is a partial result. Inspect the accessions in filings_failed with secedgar_get_filing; document_not_found means SEC returned 404, and unparseable means no schedule with a usable issuer CIK could be read.`);
425
+ if (truncated) {
426
+ guidance.push(examined === FILING_SCAN_CAP
427
+ ? `${notExamined} indexed schedules remain unexamined after the 50-document scan ceiling. Narrow with form_kind or include_amendments=false; raising limit does not extend this ceiling.`
428
+ : `${notExamined} indexed schedules remain unexamined after the ${input.limit}-filing result limit. ${input.limit < FILING_RESULT_CAP ? 'Raise limit to reach further back, or narrow with form_kind or include_amendments=false.' : 'Narrow with form_kind or include_amendments=false.'}`);
382
429
  }
383
- else if (truncated) {
430
+ if (dataset)
431
+ guidance.push(dataframeGuidance(dataset));
432
+ if (truncated) {
384
433
  ctx.enrich.truncated({
385
434
  shown: filings.length,
386
- cap: input.limit,
387
- guidance: `${totalMatching} structured blockholder filings are indexed for this issuer. Raise limit to reach further back, or narrow with form_kind or include_amendments=false.` +
388
- (dataset ? ` ${dataframeGuidance(dataset)}` : ''),
435
+ cap: examined === FILING_SCAN_CAP ? FILING_SCAN_CAP : input.limit,
436
+ guidance: guidance.join(' '),
389
437
  });
390
438
  }
391
- else if (dataset) {
392
- ctx.enrich.notice(dataframeGuidance(dataset));
439
+ else if (guidance.length > 0) {
440
+ ctx.enrich.notice(guidance.join(' '));
393
441
  }
394
442
  ctx.log.info('Beneficial owners retrieved', {
395
443
  cik: match.cik,
@@ -406,6 +454,11 @@ export const getBeneficialOwnersTool = tool('secedgar_get_beneficial_owners', {
406
454
  form_kind: input.form_kind,
407
455
  total_structured_filings: totalMatching,
408
456
  filings_parsed: filings.length,
457
+ filings_examined: examined,
458
+ filings_excluded_other_issuer: otherIssuer,
459
+ filings_not_examined: notExamined,
460
+ filings_failed: failed,
461
+ partial: failed.length > 0,
409
462
  structured_coverage_from: STRUCTURED_FROM,
410
463
  legacy_filings_before_coverage: legacyCount,
411
464
  filings,
@@ -416,8 +469,12 @@ export const getBeneficialOwnersTool = tool('secedgar_get_beneficial_owners', {
416
469
  const lines = [
417
470
  `**5%+ beneficial owners of ${result.issuer_name}** (CIK ${result.issuer_cik}) — input "${result.issuer}"`,
418
471
  `Schedule filter: ${result.form_kind} | ${result.filings_parsed} of ${result.total_structured_filings} structured filings parsed`,
472
+ `${result.filings_examined} examined | ${result.filings_excluded_other_issuer} excluded for another issuer | ${result.filings_failed.length} failed | ${result.filings_not_examined} not examined | partial: ${result.partial}`,
419
473
  `Structured coverage starts ${result.structured_coverage_from}; ${result.legacy_filings_before_coverage} legacy SC 13D/SC 13G filings sit before it in the submissions window (read those with secedgar_get_filing).`,
420
474
  ];
475
+ for (const failure of result.filings_failed) {
476
+ lines.push(`Failed document: ${failure.accession_number} — ${failure.reason}`);
477
+ }
421
478
  for (const f of result.filings) {
422
479
  lines.push('');
423
480
  const amendment = f.is_amendment
@@ -464,7 +521,7 @@ export const getBeneficialOwnersTool = tool('secedgar_get_beneficial_owners', {
464
521
  }
465
522
  if (result.dataset) {
466
523
  const note = result.dataset.truncated
467
- ? ' (truncated — more structured filings exist beyond limit)'
524
+ ? ' (truncated — indexed schedules remain unexamined)'
468
525
  : '';
469
526
  lines.push(`\nDataset: ${result.dataset.name} (${result.dataset.row_count} reporting-person rows, expires ${result.dataset.expires_at})${note} — query with secedgar_dataframe_query.`);
470
527
  }
@@ -1 +1 @@
1
- {"version":3,"file":"get-beneficial-owners.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-beneficial-owners.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-beneficial-owners.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-beneficial-owners.tool.ts"],"names":[],"mappings":"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"}
@@ -100,8 +100,8 @@ export declare const getFilingTool: import("@cyanheads/mcp-ts-core").ToolDefinit
100
100
  }, {
101
101
  readonly reason: "sec_unreachable";
102
102
  readonly code: JsonRpcErrorCode.ServiceUnavailable;
103
- readonly when: "The last of three attempts to reach SEC EDGAR got no HTTP response — the connection failed, or no response headers arrived within 15 seconds";
104
- readonly recovery: "Retry the same call in a minute — SEC EDGAR could not be reached, and nothing in the request needs to change.";
103
+ readonly when: "SEC EDGAR gave no complete, readable response — on the last attempt made (the third, or an earlier one once this call's 40-second budget for SEC failures ran out) the connection failed, no response headers arrived within 15 seconds, or the body broke off or stalled for 15 seconds, each wait capped at what was left of that budget; a 200 body was not the JSON SEC serves; or earlier SEC failures had spent that budget, so the request was never sent";
104
+ readonly recovery: "Retry the same call in a minute — SEC EDGAR did not deliver a complete, readable response, and nothing in the request needs to change.";
105
105
  readonly retryable: true;
106
106
  readonly thrownBy: "service";
107
107
  }], {
@@ -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;AAgJjE,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqiBxB,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;AAkJjE,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsiBxB,CAAC"}
@@ -4,8 +4,9 @@
4
4
  */
5
5
  import { tool, z } from '@cyanheads/mcp-ts-core';
6
6
  import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
7
+ import { CallScope } from '../../../services/edgar/call-scope.js';
7
8
  import { filingArchiveUrl, getEdgarApiService } from '../../../services/edgar/edgar-api-service.js';
8
- import { detectHeadings, filingToExtract, foldForHeadingMatch, getExtractCache, headingKey, isTocHeading, MARKER_TITLE_RE, matchSectionLine, setExtractCache, windowText, withoutSubItemLabel, } from '../../../services/edgar/filing-to-text.js';
9
+ import { detectHeadings, filingToExtract, foldForHeadingMatch, getExtractCache, headingKey, isTocHeading, MARKER_TITLE_RE, matchSectionLine, setExtractCache, spaceRunInMarker, windowText, withoutSubItemLabel, } from '../../../services/edgar/filing-to-text.js';
9
10
  const MAX_DOCUMENTS_IN_FORMAT = 10;
10
11
  /**
11
12
  * Per-category cap on the catalog rendered into an error message. Distinct from
@@ -108,8 +109,8 @@ export const getFilingTool = tool('secedgar_get_filing', {
108
109
  {
109
110
  reason: 'sec_unreachable',
110
111
  code: JsonRpcErrorCode.ServiceUnavailable,
111
- when: 'The last of three attempts to reach SEC EDGAR got no HTTP response — the connection failed, or no response headers arrived within 15 seconds',
112
- recovery: 'Retry the same call in a minute — SEC EDGAR could not be reached, and nothing in the request needs to change.',
112
+ when: "SEC EDGAR gave no complete, readable response — on the last attempt made (the third, or an earlier one once this call's 40-second budget for SEC failures ran out) the connection failed, no response headers arrived within 15 seconds, or the body broke off or stalled for 15 seconds, each wait capped at what was left of that budget; a 200 body was not the JSON SEC serves; or earlier SEC failures had spent that budget, so the request was never sent",
113
+ recovery: 'Retry the same call in a minute — SEC EDGAR did not deliver a complete, readable response, and nothing in the request needs to change.',
113
114
  retryable: true,
114
115
  thrownBy: 'service',
115
116
  },
@@ -149,7 +150,7 @@ export const getFilingTool = tool('secedgar_get_filing', {
149
150
  .string()
150
151
  .min(1)
151
152
  .optional()
152
- .describe("Jump to a named section, matched against every detected heading and the document's own lines (e.g. 'risk factors', 'item 7', 'item 2.02', 'certain relationships'). The first match wins, in this order: a heading equal to the value, or whose title after its Item/Part marker equals it; the first Item or Part heading containing it; a document line equal to it — a subheading the outline omits ('Liquidity and Capital Resources'); the first other heading containing it; a document line starting with it. In a proxy statement (DEF 14A and its variants), whose ITEM headings are ballot proposals, the first heading of any kind containing the value comes before both document-line steps. Within each heading step a body heading wins over a table-of-contents row, which lands only when nothing else at that step matches. A line landing says so in the notice; table-of-contents rows and wrapped cross-references are never line landings. A leading 20-F sub-item label on a heading or line ('3D.', 'B.') is ignored, so 'risk factors' reaches '3D. RISK FACTORS'; the value itself is matched as given. A value ending in a number matches only that number: 'item 1' reaches Item 1 and Item 1A, never Items 10–16, and 'part i' never reaches Part II. Every step ignores case, whitespace, and quote style, so a heading copied from the outline resolves whether it carries the filing's non-breaking spaces and curly quotes or plain ones; the steps comparing a whole heading or line (equal to, starting with) also ignore the punctuation between an Item or Part marker and its title, so 'Item 1A Risk Factors' reaches 'Item 1A. – Risk Factors'. Takes precedence over offset when both are provided, so leave it out when paging on with next_offset. On a miss, the error message includes the detected outline so you can pick the correct heading."),
153
+ .describe("Jump to a named section, matched against every detected heading and the document's own lines (e.g. 'risk factors', 'item 7', 'item 2.02', 'certain relationships'). The first match wins, in this order: a heading equal to the value, or whose title after its Item/Part marker equals it; the first Item or Part heading containing it; a document line equal to it — a subheading the outline omits ('Liquidity and Capital Resources') — unless the line labels a table row; the first other heading containing it; a table-row label equal to it, else a document line starting with it. In a proxy statement (DEF 14A and its variants), whose ITEM headings are ballot proposals, the first heading of any kind containing the value comes before both document-line steps. Within each heading step a body heading wins over a table-of-contents row, which lands only when nothing else at that step matches. A line landing says so in the notice; table-of-contents rows and wrapped cross-references are never line landings. A leading 20-F sub-item label on a heading or line ('3D.', 'B.') is ignored, so 'risk factors' reaches '3D. RISK FACTORS'; the value itself is matched as given. A value ending in a number matches only that number: 'item 1' reaches Item 1 and Item 1A, never Items 10–16, and 'part i' never reaches Part II. Every step ignores case, whitespace, and quote style, so a heading copied from the outline resolves whether it carries the filing's non-breaking spaces and curly quotes or plain ones; the steps comparing a whole heading or line (equal to, starting with) also ignore the punctuation between an Item or Part marker and its title, so 'Item 1A Risk Factors' reaches 'Item 1A. – Risk Factors'. Takes precedence over offset when both are provided, so leave it out when paging on with next_offset. On a miss, the error message includes the detected outline so you can pick the correct heading."),
153
154
  }),
154
155
  output: z.object({
155
156
  accession_number: z.string().describe('Filing accession number, normalized to dash format.'),
@@ -216,6 +217,7 @@ export const getFilingTool = tool('secedgar_get_filing', {
216
217
  }),
217
218
  async handler(input, ctx) {
218
219
  const api = getEdgarApiService();
220
+ const scope = new CallScope(ctx.signal);
219
221
  const accn = normalizeAccessionNumber(input.accession_number);
220
222
  const documentKey = input.document ?? PRIMARY_SENTINEL;
221
223
  const cacheKey = `${accn}:${documentKey}`;
@@ -230,7 +232,7 @@ export const getFilingTool = tool('secedgar_get_filing', {
230
232
  let records;
231
233
  if (cached === undefined) {
232
234
  // Cache miss — fetch, convert, and cache.
233
- const resolved = await resolveFilingArchive(api, accn, input.cik, input.document);
235
+ const resolved = await resolveFilingArchive(api, scope, accn, input.cik, input.document);
234
236
  if (!resolved.ok) {
235
237
  if (resolved.kind === 'document_not_found') {
236
238
  // Render candidates into the message itself — clients reliably see only
@@ -318,7 +320,7 @@ export const getFilingTool = tool('secedgar_get_filing', {
318
320
  // archive served the cached text (no candidate search, no document body fetch).
319
321
  // A resolution failure here is a real failure (EDGAR index unavailable or the
320
322
  // filing gone): fail honestly rather than fabricating placeholder metadata.
321
- const metaResolved = await resolveFilingMeta(api, accn, cached.cik, input.document);
323
+ const metaResolved = await resolveFilingMeta(api, scope, accn, cached.cik, input.document);
322
324
  if (!metaResolved.ok) {
323
325
  throw ctx.fail('filing_not_found', `Filing '${accn}' could not be resolved.`, {
324
326
  accession_number: accn,
@@ -349,7 +351,7 @@ export const getFilingTool = tool('secedgar_get_filing', {
349
351
  const idx = recent.accessionNumber.indexOf(accn);
350
352
  const header = idx >= 0
351
353
  ? undefined
352
- : (headers?.submission ?? (await api.tryGetSubmissionHeader(resolvedCik, accn)));
354
+ : (headers?.submission ?? (await api.tryGetSubmissionHeader(resolvedCik, accn, scope)));
353
355
  const form = idx >= 0 ? recent.form[idx] : header?.form;
354
356
  const filingDate = idx >= 0 ? recent.filingDate[idx] : header?.filingDate;
355
357
  const periodEnding = idx >= 0 ? recent.reportDate[idx] : header?.periodOfReport;
@@ -488,6 +490,17 @@ export const getFilingTool = tool('secedgar_get_filing', {
488
490
  ];
489
491
  },
490
492
  });
493
+ /**
494
+ * A heading or `section` value folded for {@link sectionMatches}: Unicode
495
+ * whitespace runs and typographic quotes folded on both operands, so a heading
496
+ * re-sent from a rendered outline still matches the bytes it came from (#106),
497
+ * with a space read in where a marker runs straight into its title
498
+ * ({@link spaceRunInMarker}, #180) before the fold lowercases the capital that
499
+ * marks it.
500
+ */
501
+ function foldForSectionMatch(value) {
502
+ return foldForHeadingMatch(spaceRunInMarker(value));
503
+ }
491
504
  /**
492
505
  * Whether a folded `section` needle matches a folded heading: a substring match,
493
506
  * except that a needle ending in a number never continues into a longer one.
@@ -500,6 +513,9 @@ export const getFilingTool = tool('secedgar_get_filing', {
500
513
  * `part i` never matches `PART II`, `PART III`, or `PART IV` — a 10-Q printing
501
514
  * Part I only in its table of contents otherwise landed `part i` on its body
502
515
  * `PART II - OTHER INFORMATION`. Every occurrence is checked, not just the first.
516
+ * Both operands arrive folded with a run-in marker spaced
517
+ * ({@link foldForSectionMatch}), so the numeral of "Part IFinancial Information"
518
+ * ends where heading detection ends it (#180).
503
519
  */
504
520
  function sectionMatches(heading, needle) {
505
521
  const continuation = /\d$/.test(needle)
@@ -556,11 +572,15 @@ function occursBeforeBoundary(heading, needle, from, continuation) {
556
572
  * 2. The first Item or Part heading that {@link sectionMatches}: a value inside
557
573
  * an Item title names that Item ("compensation" → "Item 11. Executive
558
574
  * Compensation"), where a line equal to it is often a table-row label.
559
- * 3. A document line equal to the value ({@link matchSectionLine}).
575
+ * 3. A document line equal to the value ({@link matchSectionLine}) that labels
576
+ * no table row.
560
577
  * 4. The first other heading that {@link sectionMatches}. One that merely holds
561
578
  * the word ("NOTE 3. BUSINESS COMBINATIONS" for "business", "COST OF
562
579
  * REVENUES" for "revenue") ranks after a line printing the value alone.
563
- * 5. A document line starting with the value.
580
+ * 5. A document line equal to the value that labels a table row, else one
581
+ * starting with the value. A row label ranks after every heading containing
582
+ * the value (#184): every line equal to `revenue` in Microsoft's 2004 10-K
583
+ * labels a row, and in tier 3 one took the value from its MD&A heading.
564
584
  *
565
585
  * Inside each heading tier, a heading on a table-of-contents row
566
586
  * ({@link isTocHeading}) ranks after every body heading of the tier, and lands
@@ -616,11 +636,8 @@ function resolveSection(text, headings, section, proxy) {
616
636
  });
617
637
  if (exact)
618
638
  return { offset: exact.offset, source: 'heading' };
619
- // Fold both operands (Unicode whitespace runs, typographic quotes) so a
620
- // heading re-sent from a rendered outline still matches the bytes it came
621
- // from (#106).
622
- const needle = foldForHeadingMatch(section);
623
- const contains = (h) => sectionMatches(foldForHeadingMatch(h.heading), needle);
639
+ const needle = foldForSectionMatch(section);
640
+ const contains = (h) => sectionMatches(foldForSectionMatch(h.heading), needle);
624
641
  if (proxy) {
625
642
  const heading = first(contains);
626
643
  if (heading)
@@ -628,7 +645,7 @@ function resolveSection(text, headings, section, proxy) {
628
645
  const line = matchSectionLine(text, section);
629
646
  return line ? { offset: line.offset, source: 'line' } : undefined;
630
647
  }
631
- const itemOrPart = first((h) => STRUCTURAL_HEADING_RE.test(h.heading) && contains(h));
648
+ const itemOrPart = first((h) => isStructuralHeading(h) && contains(h));
632
649
  if (itemOrPart)
633
650
  return { offset: itemOrPart.offset, source: 'heading' };
634
651
  const line = matchSectionLine(text, section);
@@ -657,8 +674,17 @@ function describeBlankSection(section) {
657
674
  const PROXY_FORM_RE = /^(?:DEF|PRE)[ACMNR]? ?14[AC]\b/;
658
675
  /** Most headings an outline renders, on the first page and in a section_not_found message. */
659
676
  const OUTLINE_MAX_ENTRIES = 50;
660
- /** An Item or Part heading, bare marker included — the document's structure. */
677
+ /** An Item or Part heading's opening, bare marker included. Non-global: a predicate. */
661
678
  const STRUCTURAL_HEADING_RE = /^(?:items?\s+\d|part\s+[ivx]{1,4}\b)/i;
679
+ /**
680
+ * Whether a heading is an Item or Part heading — the document's structure. Read
681
+ * with its run-in marker spaced ({@link spaceRunInMarker}), so "Part
682
+ * IFinancial Information" is Part I's heading (#180), while a numeral running on
683
+ * into a lowercase letter ("Part Ivory") stays out.
684
+ */
685
+ function isStructuralHeading(h) {
686
+ return STRUCTURAL_HEADING_RE.test(spaceRunInMarker(h.heading));
687
+ }
662
688
  /**
663
689
  * The Item and Part headings an outline keeps. Past {@link OUTLINE_MAX_ENTRIES}
664
690
  * of them, each bare marker that a later titled heading for the same Item or
@@ -668,7 +694,7 @@ const STRUCTURAL_HEADING_RE = /^(?:items?\s+\d|part\s+[ivx]{1,4}\b)/i;
668
694
  * Items 16A–19 out. A bare marker no titled heading repeats stays.
669
695
  */
670
696
  function outlineStructuralHeadings(headings) {
671
- const structural = headings.filter((h) => STRUCTURAL_HEADING_RE.test(h.heading));
697
+ const structural = headings.filter(isStructuralHeading);
672
698
  if (structural.length <= OUTLINE_MAX_ENTRIES)
673
699
  return structural;
674
700
  const titledLater = new Set();
@@ -699,7 +725,7 @@ function selectOutline(headings) {
699
725
  for (const h of headings) {
700
726
  if (structural.has(h))
701
727
  outline.push(h);
702
- else if (otherSlots > 0 && !STRUCTURAL_HEADING_RE.test(h.heading)) {
728
+ else if (otherSlots > 0 && !isStructuralHeading(h)) {
703
729
  outline.push(h);
704
730
  otherSlots--;
705
731
  }
@@ -715,7 +741,7 @@ function outlineCutNote(outline, detected) {
715
741
  if (outline.length === detected.length)
716
742
  return;
717
743
  const kept = outlineStructuralHeadings(detected).length;
718
- const structural = detected.filter((h) => STRUCTURAL_HEADING_RE.test(h.heading)).length;
744
+ const structural = detected.filter(isStructuralHeading).length;
719
745
  const scope = kept > OUTLINE_MAX_ENTRIES
720
746
  ? ''
721
747
  : kept < structural
@@ -783,20 +809,20 @@ function normalizeAccessionNumber(input) {
783
809
  * Resolve filing archive: fetch index + primary document HTML.
784
810
  * Used on cache misses to get both the document content and index metadata.
785
811
  */
786
- async function resolveFilingArchive(api, accessionNumber, providedCik, requestedDocument) {
787
- const candidateCiks = await resolveCandidateCiks(api, accessionNumber, providedCik);
812
+ async function resolveFilingArchive(api, scope, accessionNumber, providedCik, requestedDocument) {
813
+ const candidateCiks = await resolveCandidateCiks(api, scope, accessionNumber, providedCik);
788
814
  /** The last archive path whose index exists, with its records, for the error catalog. */
789
815
  let lastIndexed;
790
816
  /** First archive path whose index named a primary the archive answered 404 for. */
791
817
  let unserved;
792
818
  let requestedNotServed = false;
793
819
  for (const cik of candidateCiks) {
794
- const index = await api.tryGetFilingIndex(cik, accessionNumber);
820
+ const index = await api.tryGetFilingIndex(cik, accessionNumber, scope);
795
821
  if (!index)
796
822
  continue;
797
823
  // Records name the primary every outcome below reports, error catalogs included.
798
824
  const items = index.directory.item;
799
- const records = await readFilingRecords(api, cik, accessionNumber);
825
+ const records = await readFilingRecords(api, scope, cik, accessionNumber);
800
826
  lastIndexed = { items, records };
801
827
  if (requestedDocument && !items.some((item) => item.name === requestedDocument))
802
828
  continue;
@@ -823,7 +849,7 @@ async function resolveFilingArchive(api, accessionNumber, providedCik, requested
823
849
  documents,
824
850
  };
825
851
  }
826
- const html = await api.tryGetFilingDocument(cik, accessionNumber, targetName);
852
+ const html = await api.tryGetFilingDocument(cik, accessionNumber, targetName, scope);
827
853
  if (html)
828
854
  return { ok: true, cik, html, index, targetName, filingPrimaryName, records };
829
855
  if (requestedDocument)
@@ -841,7 +867,7 @@ async function resolveFilingArchive(api, accessionNumber, providedCik, requested
841
867
  */
842
868
  const submission = `${accessionNumber}.txt`;
843
869
  if (unserved && unserved.primary !== submission) {
844
- const html = await api.tryGetFilingDocument(unserved.cik, accessionNumber, submission);
870
+ const html = await api.tryGetFilingDocument(unserved.cik, accessionNumber, submission, scope);
845
871
  if (html) {
846
872
  return {
847
873
  ok: true,
@@ -877,15 +903,15 @@ async function resolveFilingArchive(api, accessionNumber, providedCik, requested
877
903
  * document body. Used on cache hits, with the CIK whose archive served the cached
878
904
  * text, to get metadata while skipping the expensive document fetch.
879
905
  */
880
- async function resolveFilingMeta(api, accessionNumber, cik, requestedDocument) {
881
- const index = await api.tryGetFilingIndex(cik, accessionNumber);
906
+ async function resolveFilingMeta(api, scope, accessionNumber, cik, requestedDocument) {
907
+ const index = await api.tryGetFilingIndex(cik, accessionNumber, scope);
882
908
  if (!index)
883
909
  return { ok: false };
884
910
  const items = index.directory.item;
885
911
  if (requestedDocument && !items.some((item) => item.name === requestedDocument)) {
886
912
  return { ok: false };
887
913
  }
888
- const records = await readFilingRecords(api, cik, accessionNumber);
914
+ const records = await readFilingRecords(api, scope, cik, accessionNumber);
889
915
  const filingPrimaryName = findPrimaryDocument(items, accessionNumber, records);
890
916
  if (!filingPrimaryName)
891
917
  return { ok: false };
@@ -896,17 +922,17 @@ async function resolveFilingMeta(api, accessionNumber, cik, requestedDocument) {
896
922
  * missing header page is `null`; the feed is required for the response metadata,
897
923
  * so its failure fails the call as it always has.
898
924
  */
899
- async function readFilingRecords(api, cik, accessionNumber) {
925
+ async function readFilingRecords(api, scope, cik, accessionNumber) {
900
926
  const [submissions, headers] = await Promise.all([
901
- api.getSubmissions(cik),
902
- api.tryGetFilingHeaders(cik, accessionNumber),
927
+ api.getSubmissions(cik, scope),
928
+ api.tryGetFilingHeaders(cik, accessionNumber, scope),
903
929
  ]);
904
930
  return { headers, submissions };
905
931
  }
906
- async function resolveCandidateCiks(api, accessionNumber, providedCik) {
932
+ async function resolveCandidateCiks(api, scope, accessionNumber, providedCik) {
907
933
  if (providedCik)
908
934
  return [providedCik.padStart(10, '0')];
909
- const ciks = await api.findFilingCiks(accessionNumber);
935
+ const ciks = await api.findFilingCiks(accessionNumber, scope);
910
936
  const prefixCik = (accessionNumber.split('-')[0] ?? accessionNumber.slice(0, 10)).padStart(10, '0');
911
937
  return [...new Set([...ciks, prefixCik])];
912
938
  }