@invinite-org/invinite-data-cli 0.1.21 → 0.2.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.
Files changed (54) hide show
  1. package/README.md +314 -6
  2. package/claude-plugin/.claude-plugin/plugin.json +13 -5
  3. package/claude-plugin/.mcp.json +8 -0
  4. package/claude-plugin/agents/invinite-data.md +6 -2
  5. package/claude-plugin/commands/analyze-earnings-call.md +24 -0
  6. package/claude-plugin/commands/analyze-filing.md +15 -0
  7. package/claude-plugin/commands/compare-companies.md +15 -0
  8. package/claude-plugin/commands/financial-research.md +2 -1
  9. package/claude-plugin/commands/ownership-review.md +14 -0
  10. package/claude-plugin/skills/invinite-data-cli/SKILL.md +119 -8
  11. package/dist/src/cli.d.ts +2 -0
  12. package/dist/src/cli.js +22 -1
  13. package/dist/src/cli.js.map +1 -1
  14. package/dist/src/client/api-client.d.ts +13 -1
  15. package/dist/src/client/api-client.js +46 -13
  16. package/dist/src/client/api-client.js.map +1 -1
  17. package/dist/src/client/download.d.ts +23 -0
  18. package/dist/src/client/download.js +116 -0
  19. package/dist/src/client/download.js.map +1 -0
  20. package/dist/src/client/earnings-live.d.ts +79 -0
  21. package/dist/src/client/earnings-live.js +156 -0
  22. package/dist/src/client/earnings-live.js.map +1 -0
  23. package/dist/src/client/pagination.js +2 -1
  24. package/dist/src/client/pagination.js.map +1 -1
  25. package/dist/src/client/websocket-client.d.ts +12 -1
  26. package/dist/src/client/websocket-client.js +114 -37
  27. package/dist/src/client/websocket-client.js.map +1 -1
  28. package/dist/src/commands/earnings-selector.d.ts +15 -0
  29. package/dist/src/commands/earnings-selector.js +29 -0
  30. package/dist/src/commands/earnings-selector.js.map +1 -0
  31. package/dist/src/commands/earnings.d.ts +13 -0
  32. package/dist/src/commands/earnings.js +705 -0
  33. package/dist/src/commands/earnings.js.map +1 -0
  34. package/dist/src/commands/plugin.d.ts +11 -0
  35. package/dist/src/commands/plugin.js +23 -8
  36. package/dist/src/commands/plugin.js.map +1 -1
  37. package/dist/src/commands/webhooks.d.ts +6 -0
  38. package/dist/src/commands/webhooks.js +144 -0
  39. package/dist/src/commands/webhooks.js.map +1 -0
  40. package/dist/src/commands/ws.js +23 -3
  41. package/dist/src/commands/ws.js.map +1 -1
  42. package/dist/src/formatters/flatten.d.ts +4 -0
  43. package/dist/src/formatters/flatten.js +15 -0
  44. package/dist/src/formatters/flatten.js.map +1 -0
  45. package/dist/src/formatters/time.d.ts +2 -0
  46. package/dist/src/formatters/time.js +14 -0
  47. package/dist/src/formatters/time.js.map +1 -0
  48. package/dist/src/shared/errors.d.ts +2 -1
  49. package/dist/src/shared/errors.js +5 -1
  50. package/dist/src/shared/errors.js.map +1 -1
  51. package/dist/src/shared/options.d.ts +2 -0
  52. package/dist/src/shared/options.js +6 -0
  53. package/dist/src/shared/options.js.map +1 -1
  54. package/package.json +1 -1
package/README.md CHANGED
@@ -77,6 +77,14 @@ Because environment and `.env` values take precedence over stored credentials,
77
77
 
78
78
  This repo includes plugins for AI coding tools that enable AI-powered financial data retrieval and analysis. Supports **Claude Code**, **OpenCode**, **Codex**, and **Copilot**.
79
79
 
80
+ ### Choose an integration
81
+
82
+ - **Standalone skill:** installs the Invinite workflow and CLI reference. It prefers MCP when connected and falls back to the local `invd` CLI.
83
+ - **Standalone MCP connector:** add `https://data.invinite.com/t/<teamId>/mcp` in Claude's connector settings, leave OAuth client ID/secret empty, and complete browser OAuth. This supplies tools but not the packaged research workflows.
84
+ - **Claude plugin:** bundles the skill, remote MCP connector, data agent, and research commands. During setup, enter the team ID shown in the team-pinned MCP URL in Invinite Data API settings; OAuth still uses Dynamic Client Registration and PKCE.
85
+
86
+ The team ID controls access, usage, and billing for MCP calls. CLI calls use the team selected by `invd login --team <teamId>` and do not inherit the plugin's connector setting.
87
+
80
88
  ### Quick install
81
89
 
82
90
  ```bash
@@ -112,10 +120,10 @@ npx @invinite-org/invinite-data-cli@latest plugin uninstall --all --global
112
120
 
113
121
  | Runtime | Skill | Agent | Command |
114
122
  |---------|-------|-------|---------|
115
- | **Claude Code** | `skills/invinite-data-cli/SKILL.md` | `agents/invinite-data.md` | `commands/financial-research.md` |
116
- | **OpenCode** | `command/invinite-data-cli.md` | `agents/invinite-data.md` | — |
117
- | **Codex** | `skills/invinite-data-cli/SKILL.md` | — | `skills/invinite-financial-research/SKILL.md` |
118
- | **Copilot** | `skills/invinite-data-cli/SKILL.md` | — | `skills/invinite-financial-research/SKILL.md` |
123
+ | **Claude Code** | `skills/invinite-data-cli/SKILL.md` | `agents/invinite-data.md` | `commands/financial-research.md`, `commands/analyze-earnings-call.md` |
124
+ | **OpenCode** | `command/invinite-data-cli.md` | `agents/invinite-data.md` | `command/analyze-earnings-call.md` |
125
+ | **Codex** | `skills/invinite-data-cli/SKILL.md` | — | `skills/invinite-financial-research/SKILL.md`, `skills/invinite-analyze-earnings-call/SKILL.md` |
126
+ | **Copilot** | `skills/invinite-data-cli/SKILL.md` | — | `skills/invinite-financial-research/SKILL.md`, `skills/invinite-analyze-earnings-call/SKILL.md` |
119
127
 
120
128
  ### Alternative: Claude Code plugin directory
121
129
 
@@ -123,6 +131,8 @@ npx @invinite-org/invinite-data-cli@latest plugin uninstall --all --global
123
131
  claude --plugin-dir /path/to/invinite-data-cli/claude-plugin
124
132
  ```
125
133
 
134
+ The Claude plugin also includes `compare-companies`, `analyze-filing`, and `ownership-review`. Its `.mcp.json` connects the team-pinned remote server automatically; use `/mcp` to complete OAuth or inspect connection status in Claude Code. In Claude web/Desktop, install the plugin through your organization's plugin marketplace, enter the team ID when prompted, and connect the bundled connector.
135
+
126
136
  ### Usage examples
127
137
 
128
138
  Use `/financial-research` for multi-step analysis:
@@ -133,6 +143,13 @@ Use `/financial-research` for multi-step analysis:
133
143
  /financial-research Analyze risk factors from NVDA's latest 10-K filing
134
144
  ```
135
145
 
146
+ Use `/analyze-earnings-call` for one call — results vs guidance, raised / lowered guidance, analyst focus and tone change vs the prior call, cited with `[m:ss]` timestamps:
147
+
148
+ ```
149
+ /analyze-earnings-call NVDA
150
+ /analyze-earnings-call AAPL 2026 Q4
151
+ ```
152
+
136
153
  Or ask questions directly — the AI will auto-trigger the skill and delegate to the data agent as needed.
137
154
 
138
155
  > **Note:** The CLI must be installed and authenticated (see [Authentication](#authentication)) for the plugin to work.
@@ -157,12 +174,14 @@ These options are available on all data commands:
157
174
  - [metrics](#metrics) — Financial metrics, ratios, and growth
158
175
  - [segments](#segments) — Segmented financials
159
176
  - [filings](#filings) — SEC filings
177
+ - [earnings](#earnings) — Earnings calls: calendar, transcripts, Q&A, guidance, audio, slides, documents, search
160
178
  - [ownership](#ownership) — Institutional ownership
161
179
  - [insider-trades](#insider-trades) — Insider trading data
162
180
  - [ipos](#ipos) — IPO listings
163
181
  - [market](#market) — Market data
164
182
  - [metadata](#metadata) — API metadata
165
- - [ws](#ws) — WebSocket streaming
183
+ - [webhooks](#webhooks) — Earnings-call webhook subscriptions
184
+ - [ws](#ws) — WebSocket streaming (`ws listen --earnings` for live call transcripts)
166
185
 
167
186
  ---
168
187
 
@@ -491,6 +510,255 @@ invd filings form-types -i AAPL
491
510
 
492
511
  ---
493
512
 
513
+ ### earnings
514
+
515
+ Earnings calls: calendar, transcripts, Q&A, guidance and KPIs, audio, slides, documents, search. The live transcript (`ws listen --earnings`), audio, slides, the live stream and webhooks need the **PRO** plan (calendar, events and `live` need LITE, the other reads STANDARD); a `403` names the plan a route needs.
516
+
517
+ **Selecting a call.** Commands about one call (marked *selector* below) take either `--event <event_id>` (a UUID from `earnings events` / `earnings calendar`; wins over the rest), or `-i, --identifier <ticker|cik>` with `--year <n>` + `--quarter <n>` (the company's fiscal quarter) or `--date <YYYY-MM-DD>` (the New York call day).
518
+
519
+ **Saving files.** `--output <file>` saves a transcript, press release, recording or deck (`documents --output <dir>` saves every document); an existing file is only replaced with `--force`. Without `--output` the media commands print **presigned URLs that expire after 15 minutes**.
520
+
521
+ #### `earnings calendar`
522
+
523
+ Upcoming and recent calls across companies.
524
+
525
+ | Option | Description | Default |
526
+ |--------|-------------|---------|
527
+ | `--from <date>` / `--to <date>` | New York days (at most 92 days) | today / from + 14 days |
528
+ | `--status <list>` | `estimated`, `unconfirmed`, `confirmed`, `postponed`, `cancelled` (comma-separated) | — |
529
+ | `--session <session>` | `bmo`, `amc`, `intraday` | — |
530
+ | `--exchange <exchange>` | Exchange | — |
531
+ | `--event-type <type>` | `earnings_call`, `investor_day`, `conference`, `agm`, `other`, or `all` (every type) | `earnings_call` |
532
+ | `-s, --sort` / `-l, --limit` / `--offset` | Sort, page size (1–500), offset | — |
533
+
534
+ ```bash
535
+ invd earnings calendar --from 2026-10-26 --to 2026-10-30 --status confirmed
536
+ ```
537
+
538
+ #### `earnings events`
539
+
540
+ A company's calls.
541
+
542
+ | Option | Description |
543
+ |--------|-------------|
544
+ | `-i, --identifier <ticker>` | Ticker or CIK **(required)** |
545
+ | `--from <date>` / `--to <date>` | Call day range |
546
+ | `--event-type <type>` | `earnings_call`, `investor_day`, `conference`, `agm`, `other`, or `all` (default: every type) |
547
+ | `--observations` | Include the date / time observations per call |
548
+ | `-s, --sort` / `-l, --limit` / `--offset` | Sort, page size (1–200), offset |
549
+
550
+ ```bash
551
+ invd earnings events -i AAPL -s desc -l 4
552
+ ```
553
+
554
+ #### `earnings live`
555
+
556
+ Calls being captured right now (`live_audio` = a live stream exists).
557
+
558
+ ```bash
559
+ invd earnings live
560
+ ```
561
+
562
+ #### `earnings event`
563
+
564
+ One call with its date / time observations: `invd earnings event <event_id>`.
565
+
566
+ ```bash
567
+ invd earnings event 0b9d6f43-6b1e-4c39-9d3a-2f6a3c1e8b11
568
+ ```
569
+
570
+ #### `earnings transcript` *(selector)*
571
+
572
+ | Option | Description |
573
+ |--------|-------------|
574
+ | `--format <format>` | `speakers` (default), `text`, `words`, `sections`, `cleaned` |
575
+ | `--transcript-version <n>` | A published version (`earnings versions`); not `--version`, which prints the CLI version |
576
+ | `--as-of <iso>` | The version current at that instant |
577
+ | `-o, --output <file>` / `--force` | Save the transcript as text |
578
+
579
+ The header shows where the Q&A begins ("Q&A starts at 41:07") when the call has one; `--json` carries it as `qa_start_ms` (milliseconds, `null` without a Q&A).
580
+
581
+ ```bash
582
+ invd earnings transcript -i AAPL --year 2026 --quarter 4 --output aapl-q4.txt
583
+ ```
584
+
585
+ #### `earnings versions` *(selector)*
586
+
587
+ Published transcript versions (final, corrected, …).
588
+
589
+ ```bash
590
+ invd earnings versions -i AAPL --date 2026-10-30
591
+ ```
592
+
593
+ #### `earnings transcript-diff` *(selector)*
594
+
595
+ | Option | Description |
596
+ |--------|-------------|
597
+ | `--from <n>` | Older version **(required)** |
598
+ | `--to <n>` | Newer version (default: the current one) |
599
+
600
+ ```bash
601
+ invd earnings transcript-diff --event <event_id> --from 1
602
+ ```
603
+
604
+ #### `earnings qa` *(selector)*
605
+
606
+ Question / answer pairs with the analyst and the answering executives (`-l, --limit` 1–200, `--offset`).
607
+
608
+ ```bash
609
+ invd earnings qa -i NVDA --year 2027 --quarter 2
610
+ ```
611
+
612
+ #### `earnings participants` *(selector)*
613
+
614
+ Speakers of the call (`--evidence` adds the quotes each name was resolved from).
615
+
616
+ ```bash
617
+ invd earnings participants --event <event_id> --evidence
618
+ ```
619
+
620
+ #### `earnings analysts`
621
+
622
+ Analysts on a company's calls (`-i` **required**, `-l, --limit` 1–100, `--offset`).
623
+
624
+ ```bash
625
+ invd earnings analysts -i MSFT
626
+ ```
627
+
628
+ #### `earnings person`
629
+
630
+ One person's call appearances: `invd earnings person <person_id>` (`-l, --limit` 1–200, `--offset`).
631
+
632
+ ```bash
633
+ invd earnings person <person_id>
634
+ ```
635
+
636
+ #### `earnings press-release` *(selector)*
637
+
638
+ | Option | Description |
639
+ |--------|-------------|
640
+ | `--body` | Include the release text |
641
+ | `-o, --output <file>` / `--force` | Save the release text |
642
+
643
+ ```bash
644
+ invd earnings press-release -i AAPL --year 2026 --quarter 4 --body
645
+ ```
646
+
647
+ #### `earnings extractions` *(selector)*
648
+
649
+ | Option | Description |
650
+ |--------|-------------|
651
+ | `--kind <kind>` | `guidance` (default) or `kpi` |
652
+ | `--review <filter>` | Guidance review filter: `approved`, `auto`, `all` |
653
+ | `-l, --limit` / `--offset` | Page size (1–500), offset |
654
+
655
+ ```bash
656
+ invd earnings extractions --event <event_id> --kind kpi
657
+ ```
658
+
659
+ #### `earnings guidance-history`
660
+
661
+ A company's guidance for one metric across calls.
662
+
663
+ | Option | Description |
664
+ |--------|-------------|
665
+ | `-i, --identifier <ticker>` | Ticker or CIK **(required)** |
666
+ | `--metric <metric>` | Normalized metric, e.g. `revenue`, `eps_non_gaap`, `segment:iphone` **(required)** |
667
+ | `--period-kind <kind>` | `quarter`, `fiscal_year`, `half`, `other` |
668
+ | `--basis <basis>` | `gaap`, `non_gaap`, `unknown` |
669
+ | `-l, --limit <n>` | Series entries (1–40) |
670
+
671
+ ```bash
672
+ invd earnings guidance-history -i AAPL --metric revenue --period-kind quarter
673
+ ```
674
+
675
+ #### `earnings diff` *(selector)*
676
+
677
+ What changed against the prior call: similarity, tone, hedging, new / dropped topics, slide changes (`--vs prior`, the only base).
678
+
679
+ ```bash
680
+ invd earnings diff -i AAPL --year 2026 --quarter 4
681
+ ```
682
+
683
+ #### `earnings metrics` *(selector)*
684
+
685
+ Call structure metrics (length, Q&A share, question count, …).
686
+
687
+ ```bash
688
+ invd earnings metrics --event <event_id>
689
+ ```
690
+
691
+ #### `earnings prosody` *(selector)*
692
+
693
+ Speech timing, pitch and energy per speaker (`--section all|prepared|qa`).
694
+
695
+ ```bash
696
+ invd earnings prosody --event <event_id> --section qa
697
+ ```
698
+
699
+ #### `earnings audio` *(selector)*
700
+
701
+ The recording as a presigned URL, or `-o, --output <file>` (+ `--force`) to save it.
702
+
703
+ ```bash
704
+ invd earnings audio --event <event_id> --output call.mp3
705
+ ```
706
+
707
+ #### `earnings slides` *(selector)*
708
+
709
+ | Option | Description |
710
+ |--------|-------------|
711
+ | `--markdown` | Include each page's extracted text |
712
+ | `--pages <range>` | Page or range, e.g. `3` or `1-5` |
713
+ | `-o, --output <file>` / `--force` | Save the deck PDF |
714
+
715
+ ```bash
716
+ invd earnings slides -i AAPL --year 2026 --quarter 4 --output deck.pdf
717
+ ```
718
+
719
+ #### `earnings documents` *(selector)*
720
+
721
+ Investor documents of the call (CFO commentary, data sheets, letters, filings).
722
+
723
+ | Option | Description |
724
+ |--------|-------------|
725
+ | `--kind <list>` | `cfo_commentary`, `financial_data`, `shareholder_letter`, `fact_sheet`, `company_transcript`, `sec_filing`, `infographic`, `other` |
726
+ | `--body` | Include the extracted text |
727
+ | `-l, --limit` / `--offset` | Page size (1–100), offset |
728
+ | `-o, --output <dir>` / `--force` | Save every document as `<kind>-<document_id>.<ext>` |
729
+
730
+ With `--output`, a document without a download URL (a link-only `sec_filing`, or a file the API could not fetch — use its `source_url`) is never skipped silently: each gets a warning on stderr, followed by a count (`2 of 3 documents saved; 1 skipped`). The exit code is 0 when at least one document was saved (or the list was empty) and 1 when documents were listed but none could be saved. An interrupted download (Ctrl-C) never leaves a partial file behind.
731
+
732
+ ```bash
733
+ invd earnings documents --event <event_id> --output ./docs
734
+ ```
735
+
736
+ #### `earnings search`
737
+
738
+ Semantic search over call transcripts and slides.
739
+
740
+ | Option | Description |
741
+ |--------|-------------|
742
+ | `-q, --query <text>` | Search text **(required)** |
743
+ | `--event <event_id>` / `-i, --identifier <ticker>` | Only this call / company |
744
+ | `--from <date>` / `--to <date>` | Call day range |
745
+ | `--type <type>` | `transcript`, `qa`, `preparedRemarks`, `presentation` |
746
+ | `-l, --limit <n>` | Passages (1–8) |
747
+
748
+ ```bash
749
+ invd earnings search -q "data center demand" -i NVDA
750
+ ```
751
+
752
+ #### `earnings stream` *(selector)*
753
+
754
+ The live HLS audio URL of a call in progress (PRO; `status` = `available`, `not_started`, `ended` or `disabled`). Play it with `ffplay` or VLC; the URL expires (`expires_at`).
755
+
756
+ ```bash
757
+ invd earnings stream --event <event_id>
758
+ ```
759
+
760
+ ---
761
+
494
762
  ### ownership
495
763
 
496
764
  Institutional ownership data.
@@ -651,13 +919,41 @@ invd metadata section-ids
651
919
 
652
920
  ---
653
921
 
922
+ ### webhooks
923
+
924
+ Earnings-call webhook subscriptions (PRO): signed, retried `POST`s of the call lifecycle to your HTTPS endpoint. Events: `earnings_call.scheduled`, `.rescheduled`, `.started`, `.ended`, `.transcript_provisional`, `.transcript_ready`, `.transcript_corrected`, `.assets_ready`, `.guidance_flash` (reserved), and `ping`. Deliveries carry `X-Invinite-Signature: t=…,v1=…` (HMAC-SHA256 of `<t>.<raw body>` with the secret) and are retried after 1 min, 5 min, 30 min, 2 h, 6 h, 12 h and 24 h.
925
+
926
+ | Command | Description |
927
+ |---------|-------------|
928
+ | `webhooks list` | Your team's subscriptions (never the secret, only `secret_hint`) |
929
+ | `webhooks create --url <url> --events <list> [--ciks <list>] [--keywords <list>]` | Create one (max 10 per team; `--ciks` max 10, default every company). **Prints the signing secret once** |
930
+ | `webhooks delete <id>` | Delete a subscription |
931
+ | `webhooks rotate-secret <id>` | New secret (printed once); the old one stays valid until `previous_secret_expires_at` (5 min) |
932
+ | `webhooks test <id>` | Queue a signed `ping` delivery |
933
+ | `webhooks deliveries <id>` | The last 100 attempts: `delivery_id`, `event`, `attempt`, `status`, `response_status`, `duration_ms`, `at`, `next_attempt_at` |
934
+
935
+ ```bash
936
+ invd webhooks create --url https://hooks.example.com/invinite --events earnings_call.transcript_ready,earnings_call.started --ciks 320193
937
+ invd webhooks test <id>
938
+ invd webhooks deliveries <id>
939
+ ```
940
+
941
+ ---
942
+
654
943
  ### ws
655
944
 
656
945
  Real-time WebSocket streaming.
657
946
 
658
947
  #### `ws listen`
659
948
 
660
- Listen to real-time SEC filing notifications. Automatically reconnects on disconnection with exponential backoff.
949
+ Listen to real-time SEC filing notifications, or with `--earnings` follow one earnings call's live transcript (PRO). Automatically reconnects on disconnection with exponential backoff.
950
+
951
+ | Option | Description |
952
+ |--------|-------------|
953
+ | `--earnings <event_id\|cik>` | Follow a live call: event ID (UUID) or CIK |
954
+ | `--since-seq <n>` | Replay the finals after this seq (default `-1` = the whole call so far) |
955
+ | `--partials` | Show interim segments, overwritten in place (terminal only; `--json` emits them) |
956
+ | `--names` | Print each speaker-name snapshot |
661
957
 
662
958
  ```bash
663
959
  invd ws listen
@@ -665,6 +961,18 @@ invd ws listen
665
961
 
666
962
  Press `Ctrl+C` to disconnect.
667
963
 
964
+ **Live transcripts.** Find a call in progress, then follow it:
965
+
966
+ ```bash
967
+ invd earnings live
968
+ invd ws listen --earnings 0b9d6f43-6b1e-4c39-9d3a-2f6a3c1e8b11 --partials
969
+ # AAPL 2026-10-30T21:00:00.000Z · capturing · from seq 0 (latest 41)
970
+ # [0:12] Operator: Good afternoon and welcome to the Apple Q4 fiscal year 2026 earnings call.
971
+ # [1:05] Tim Cook: Thank you, everyone, for joining us.
972
+ ```
973
+
974
+ Finals are named from the newest speaker-name snapshot (`Speaker A` until a name is known). A `gap` line marks a seq range with no final yet (a late final may still follow on the same subscription, so finals can print slightly out of order); `resume_unavailable` means missed finals cannot be replayed right now — live delivery continues and the API back-fills them once it can. Neither needs a re-subscribe. After a reconnect the listener resumes after the last final it printed; it exits once the final transcript is ready (`invd earnings transcript --event <id>`). With `--json` every frame is one JSON line (NDJSON), e.g. `invd ws listen --earnings 320193 --json | jq -r 'select(.type=="transcript_segment") | .text'`.
975
+
668
976
  ---
669
977
 
670
978
  ## Output Formats
@@ -1,11 +1,19 @@
1
1
  {
2
- "name": "invd",
3
- "description": "Fetch and analyze financial data using the Invinite Data API — company fundamentals, financial statements, SEC filings, institutional ownership, insider trades, and more.",
4
- "version": "0.1.0",
2
+ "name": "invinite-financial-data",
3
+ "description": "Fetch and analyze financial data using the Invinite Data API — company fundamentals, financial statements, SEC filings, earnings calls (transcripts, guidance, Q&A, live calls), institutional ownership, insider trades, and more.",
4
+ "version": "0.4.0",
5
5
  "author": {
6
- "name": "Outraday"
6
+ "name": "Invinite"
7
7
  },
8
8
  "homepage": "https://github.com/outraday-org/invinite-data-cli",
9
9
  "repository": "https://github.com/outraday-org/invinite-data-cli",
10
- "license": "ISC"
10
+ "license": "ISC",
11
+ "userConfig": {
12
+ "team_id": {
13
+ "type": "string",
14
+ "title": "Invinite team ID",
15
+ "description": "Team billed for Data API usage. Copy it from the team-pinned MCP URL in Invinite Data API settings.",
16
+ "required": true
17
+ }
18
+ }
11
19
  }
@@ -0,0 +1,8 @@
1
+ {
2
+ "mcpServers": {
3
+ "invinite-financial-data": {
4
+ "type": "http",
5
+ "url": "https://data.invinite.com/t/${user_config.team_id}/mcp"
6
+ }
7
+ }
8
+ }
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: invinite-data
3
- description: Fetches financial data from the Invinite Data API for analysis. Use this agent whenever you need company financials, SEC filings, institutional ownership, insider trades, financial ratios, growth metrics, or any stock/company data. Delegate to this agent when the user asks for financial data retrieval, company research, or comparative financial analysis — even if they don't mention "Invinite" explicitly. This agent knows how to efficiently query the right endpoints, combine data from multiple sources, and return structured results ready for analysis.
3
+ description: Fetches financial data from the Invinite Data API for analysis. Use this agent whenever you need company financials, SEC filings, institutional ownership, insider trades, financial ratios, growth metrics, earnings calls (calendar, transcripts, guidance and KPIs, Q&A, press releases, slides), or any stock/company data. Delegate to this agent when the user asks for financial data retrieval, company research, or comparative financial analysis — even if they don't mention "Invinite" explicitly. This agent knows how to efficiently query the right endpoints, combine data from multiple sources, and return structured results ready for analysis.
4
4
  tools: Bash(invd *), Read, Glob, Grep
5
5
  skills:
6
6
  - invinite-data-cli
@@ -23,12 +23,14 @@ You are a financial data retrieval specialist. Your job is to fetch the requeste
23
23
  - Always use `--json` on every data command
24
24
  - **Before querying metrics (ratios, CAGR, or growth) or financial statements, first run `invd metadata metrics --json`** to discover the available metric identifiers. The responses from these endpoints use `metric_id` keys — you need the metadata to know what metrics exist and to correctly interpret the results. Run this as a first step alongside or before your main data queries.
25
25
  - **Before querying filing sections, first run `invd metadata section-ids --json`** to discover valid section IDs.
26
- - If a command fails with an authentication error, report it clearly and tell the caller that `INVINITE_DATA_API_KEY` must be set or `invd config set-key` must be run
26
+ - If a command fails with an authentication error, report it clearly and tell the caller to run `invd login`; `INVINITE_DATA_API_KEY` and `invd config set-key` remain manual fallbacks
27
27
  - If a company identifier is ambiguous, use `invd company search -q "<name>" --json` first to resolve it
28
28
  - For comparing companies, prefer `invd financials snapshot -i AAPL,MSFT,GOOGL -p annual --json` over individual queries
29
29
  - When fetching financial statements, default to `annual` period unless the request specifies otherwise
30
30
  - Use `--limit` appropriately — don't fetch more data than needed, but don't under-fetch either
31
31
  - For large datasets, use `--all` only when specifically needed
32
+ - For earnings calls, resolve the call's `event_id` first (`invd earnings events -i <TICKER> -s desc -l 4 --json`) and pass `--event <event_id>` to every per-call command; keep `start_ms` values in the results so the caller can cite `[m:ss]` timestamps
33
+ - Never pass `--output` (file downloads) unless the caller asked for a file
32
34
 
33
35
  ## Query planning
34
36
 
@@ -40,6 +42,8 @@ Common multi-step patterns:
40
42
  - **Ownership analysis**: holdings-by-company + ownership transactions
41
43
  - **Filing deep-dive**: metadata section-ids (first) + filings list → then filings sections for full text
42
44
  - **Comparative analysis**: metadata metrics (first) + financials snapshot with multiple tickers + metrics ratios for each
45
+ - **Earnings call review**: earnings events (first, for the `event_id`) → then in parallel press-release + extractions `--kind guidance` + extractions `--kind kpi` + qa + diff
46
+ - **Guidance tracking**: earnings guidance-history `--metric <metric>` across calls + extractions of the latest call
43
47
 
44
48
  ## Output format
45
49
 
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: analyze-earnings-call
3
+ description: Analyze a company's latest (or a given quarter's) earnings call — results vs guidance, raised or lowered guidance, analyst focus, tone change against the prior call — with timestamped evidence.
4
+ argument-hint: <ticker> [fiscal year + quarter, e.g. 2026 Q3]
5
+ ---
6
+
7
+ # Analyze Earnings Call
8
+
9
+ Analyze the earnings call requested in `$ARGUMENTS` using Invinite Data. Prefer the MCP tools (`earnings_call_*`) when connected; otherwise use the `invd earnings` commands below with `--json`.
10
+
11
+ 1. **Find the call.** Without a quarter, take the latest call that already happened: `invd earnings events -i <TICKER> --to <today> -s desc -l 1 --json` (MCP `earnings_call_events`). With a quarter, select it directly with `-i <TICKER> --year <YYYY> --quarter <Q>`. Use the call's `event_id` for every later step (`--event <event_id>`). If the call has no transcript yet, say so and stop.
12
+ 2. **Fetch in parallel** (all with `--event <event_id> --json`):
13
+ - press release: `invd earnings press-release` (`earnings_call_press_release`)
14
+ - guidance: `invd earnings extractions --kind guidance` and KPIs: `invd earnings extractions --kind kpi` (`earnings_call_guidance`)
15
+ - Q&A: `invd earnings qa` (`earnings_call_qa`) and participants: `invd earnings participants` (`earnings_call_participants`)
16
+ - diff vs the prior call: `invd earnings diff` (`earnings_call_diff`)
17
+ - only when a claim needs the exact wording: `invd earnings transcript` (`earnings_call_transcript`) or `invd earnings search -q "<topic>" --event <event_id>` (`earnings_call_search`)
18
+ 3. **Summarise**:
19
+ - **Results vs guidance** — reported figures from the press release against the guidance given on the prior call (`invd earnings guidance-history -i <TICKER> --metric <metric>` for a metric's series).
20
+ - **Guidance changes** — each item raised, lowered, maintained, introduced or withdrawn (`direction`), with the period and basis (GAAP / non-GAAP).
21
+ - **Analyst focus** — the recurring Q&A themes, who asked (firm), and where management deflected.
22
+ - **Tone change** — the diff's tone shift, hedging / uncertainty changes and new or dropped topics.
23
+ 4. **Cite evidence** — every quote or claim carries its `[m:ss]` timestamp (from `start_ms`) and the speaker; separate what was said from your interpretation.
24
+ 5. Flag what is missing (no press release, no guidance extracted, prior call not covered) instead of inferring it.
@@ -0,0 +1,15 @@
1
+ ---
2
+ description: Analyze a company's SEC filing for material changes, risks, management commentary, and evidence.
3
+ argument-hint: <ticker> [form type or research question]
4
+ ---
5
+
6
+ # Analyze SEC Filing
7
+
8
+ Analyze the filing requested in `$ARGUMENTS` using Invinite Data.
9
+
10
+ 1. Resolve the company and identify the relevant filing and accession number.
11
+ 2. Discover valid filing section IDs before requesting sections.
12
+ 3. Retrieve only the sections needed for the question, normally risk factors, MD&A, business, and financial statements.
13
+ 4. Separate direct filing evidence from your interpretation.
14
+ 5. Report the form type, filing date, accession number, and section for every material finding.
15
+ 6. Flag missing sections or unavailable periods instead of inferring their contents.
@@ -0,0 +1,15 @@
1
+ ---
2
+ description: Compare the financial performance, valuation, growth, and risks of two or more companies.
3
+ argument-hint: <tickers or company names> [focus]
4
+ ---
5
+
6
+ # Compare Companies
7
+
8
+ Compare the companies in `$ARGUMENTS` using Invinite Data.
9
+
10
+ 1. Resolve ambiguous company names with `company_search` or the equivalent `invd` command.
11
+ 2. Fetch available metric definitions before requesting financial metrics.
12
+ 3. Fetch company details, the latest annual standardized snapshot, profitability and valuation ratios, and five-year CAGR where available.
13
+ 4. Run independent reads in parallel when the active Claude surface supports it.
14
+ 5. Present a compact comparison table followed by the most material strengths, weaknesses, and data limitations.
15
+ 6. Cite the reporting periods used; do not mix annual and quarterly values without labeling them.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: financial-research
3
- description: Perform AI-powered financial research and analysis. Use when the user asks to research companies, compare financials, analyze ownership patterns, review SEC filings, evaluate growth trends, or any multi-faceted financial question. This command orchestrates parallel data fetching and then synthesizes the results into a coherent analysis.
3
+ description: Perform AI-powered financial research and analysis. Use when the user asks to research companies, compare financials, analyze ownership patterns, review SEC filings or earnings calls, evaluate growth trends, or any multi-faceted financial question. This command orchestrates parallel data fetching and then synthesizes the results into a coherent analysis.
4
4
  argument-hint: [question or research topic]
5
5
  ---
6
6
 
@@ -17,6 +17,7 @@ Break the user's request into independent data retrieval tasks. Think about what
17
17
  - **Statements**: income statements, balance sheets, cash flows (for trend analysis)
18
18
  - **Ownership**: institutional holders, ownership transactions, insider trades
19
19
  - **Filings**: SEC filing sections (risk factors, MD&A, business descriptions)
20
+ - **Earnings calls**: call calendar, transcripts, management guidance and KPIs, Q&A with analysts, press releases, the diff vs the prior call
20
21
  - **Context**: dividends, stock splits, fiscal periods, segments
21
22
 
22
23
  Each independent data need becomes a separate subagent task.
@@ -0,0 +1,14 @@
1
+ ---
2
+ description: Review institutional ownership, position changes, concentration, and insider trading for a company.
3
+ argument-hint: <ticker> [period or focus]
4
+ ---
5
+
6
+ # Review Ownership
7
+
8
+ Review ownership activity for `$ARGUMENTS` using Invinite Data.
9
+
10
+ 1. Resolve the company identifier.
11
+ 2. Fetch institutional holdings, institutional transactions, and insider trades for the requested period.
12
+ 3. Identify the largest holders, notable new or exited positions, and meaningful insider acquisitions or dispositions.
13
+ 4. Distinguish position value from share count and filing date from transaction date.
14
+ 5. Present concise tables and call out reporting-lag limitations in institutional filings.