Canli Fundamentals について
Canli Fundamentalsは、SEC企業基本情報を申告時点ごとに調べる研究者やバックテスト開発者向けのMCPサーバーです。初回報告値、最新値、指定日時点の値を区別し、各結果に申告書を紐付けます。
主な機能
- 01指定日時点での基本情報取得
- 02初回報告値と最新値の比較
- 03訂正、株式分割、タグ変更の特定
- 04期間・指標ごとの申告履歴確認
- 05最大50社の指標比較
- 06企業の概念と申告範囲の確認
活用シーン
- 01過去のバックテストで後日の改訂値を回避
- 02企業財務の訂正状況を確認
- 03申告日時点のデータで同業他社を比較
- 04期間の数値を申告書まで追跡
MCP 対応
MCPサーバーとして、SEC XBRL基本情報、申告履歴、企業情報を照会する7つの読み取り専用ツールを公開します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://canlicapital.com/mcp/fundamentalsclaude mcp add --transport http arhancanli-canli-fundamentals https://canlicapital.com/mcp/fundamentals{"mcpServers":{"arhancanli-canli-fundamentals":{"type":"http","url":"https://canlicapital.com/mcp/fundamentals"}}}Cursor で開く{"servers":{"arhancanli-canli-fundamentals":{"type":"http","url":"https://canlicapital.com/mcp/fundamentals"}}}VS Code で開く{"mcpServers":{"arhancanli-canli-fundamentals":{"type":"http","url":"https://canlicapital.com/mcp/fundamentals"}}}{"mcpServers":{"arhancanli-canli-fundamentals":{"serverUrl":"https://canlicapital.com/mcp/fundamentals"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
7| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| as_of | string | はい | 判断日:この日以前に提出された申告のみを対象とします。 |
| ratios | boolean | いいえ | 利益率、ROE、ROA、レバレッジ、フリーキャッシュフローを追加します。 |
| company | string | はい | ティッカー(AAPL)、CIK、または会社名。 |
| periods | enum | いいえ | annual(デフォルト)または quarterly。annual | quarterly |
| concepts | array | いいえ | デフォルト:一般的な指標 10 項目。 |
詳細
canli-fundamentals-mcp
SEC 企業のファンダメンタルズを、時点ごとに扱う MCP サーバーです。企業が XBRL で報告したあらゆる値について、AI アシスタントに次の 3 点を伝えます。最初に報告された値、最新の提出書類に記載された値、そして指定した日付時点で把握されていた値です。すべての値に、その根拠となる提出書類が付属します。
この違いは重要です。Apple の 2018 会計年度の希薄化後 EPS は、2018 年と 2019 年の年次報告書では 11.91 でしたが、4 対 1 の株式分割後、2020 年の報告書では 2.98 でした。現在のデータを読み込んで 2018 年の意思決定をバックテストすると、2018 年には誰も見ていない数値を使うことになります。Apple の 2017 会計年度末の買掛金は、最初は 490.5 億ドルと報告され、1 年後には 442.4 億ドルに変更されました。Apple が報告した 3,827 の年次期間のうち、現在、初回報告時とは異なる値になっている期間は 190 あります。これには、株式分割による 1 株当たりの数値と株式数の変更 35 件は含まれていません。
npx -y canli-fundamentals-mcp
Claude Code:
claude mcp add canli-fundamentals -- npx -y canli-fundamentals-mcp
インストール不要のホステッド版(claude.ai コネクター、ChatGPT、Cursor、または URL を受け付ける任意のクライアント):
claude mcp add --transport http canli-fundamentals https://canlicapital.com/mcp/fundamentals
Claude Desktop、Cursor、または任意の MCP クライアント(設定内の mcpServers):
{
"mcpServers": {
"canli-fundamentals": { "command": "npx", "args": ["-y", "canli-fundamentals-mcp"] }
}
}
続けて、「2018 年 12 月 31 日時点で Apple は何を報告していましたか?」「Microsoft の年次報告の数値のうち、修正再表示されたものはどれですか?」「2015 年以降の Toyota の売上高を表示して」「Apple の 2017 年の買掛金を報告したすべての提出書類を表示して」などと尋ねてください。
ツール
| ツール | 返される内容 |
|---|---|
known_as_of | 各指標について、指定日以前に提出された期間のうち最も新しい期間と、その時点での値を返します。後に修正再表示された値(changed_after)や、企業が報告をやめた指標(stale)にフラグを付けます。デフォルトでは一般的な 10 指標を返します。ratios: true を指定すると、各入力値とその提出書類を示す、これらの提出書類のみから算出した利益率、自己資本利益率、総資産利益率、負債資本倍率、フリーキャッシュフローが追加されます。バックテストに使う時点情報の基本機能です。 |
history | 1 つの指標の時系列を新しい順に返します。first_reported(デフォルト)、latest、または as_of 日付時点で把握されていた値を指定できます。年次、四半期、またはすべての期間が対象です。 |
restatements | 最新の値が初回報告時と異なる期間について、両方の値、変化率、および原因(split、split_likely、tag_change、または該当なし)を返します。該当なしは、修正再表示、区分変更、または訂正を示します。指定がなければ、すべての概念を調べます。 |
vintages | 1 つの指標について、1 つの期間を報告したすべての提出書類を古い順に返します。 |
list_concepts | 企業が報告する概念と、対応する平易な名称を、単位、期間数、日付範囲、修正再表示された期間数とともに返します。 |
find_company | 企業名、ティッカー、または CIK に一致する企業を、関連度の高い順に、CIK とティッカー、および他のツールが参照する企業を含めて返します。 |
cross_section | 最大 50 社(ティッカー、CIK、または名称)について、指定日までに提出された 1 つの指標を返します。各社の最新期間、その時点での値、提出書類、および後に修正再表示されたかどうかが含まれます。ピア比較やファクターに使う時点情報の基本要素です。 |
7 つのツールはすべて読み取り専用です。
クロスセクションでは、各社のスナップショットから要求された指標だけをインデックス化し、それらをメモリに保持しないため、50 社でもメモリ使用量は 1 社分とほぼ同じです。同じ SEC スナップショットを使った独立した Python による選択結果との照合済みです(canlicapital リポジトリの scripts/research/fundamentals-pit-check/)。3 つの日付における 20 社の NetIncomeLoss、年次データについて、値、期間、提出日、アクセッション番号、changed_after のすべてが 60 件中 60 件で一致しました。このうち 5 件は、どちらにも値がありませんでした(たとえば、最初の 10-K 提出前の Meta)。会計年度末は企業によって異なるため、値を比較する前に end を比較してください。
会社の指定
company には、ティッカー(AAPL)、SEC CIK(320193)、または会社名(Exxon Mobil、Alphabet、
Goldman Sachs)を指定します。名前は大文字と小文字、句読点、末尾の法人格を示す語(Inc、Corp、
Holdings)を無視して照合され、名前で読み取った結果には、どのように解決されたかが company.matched に示されます。名前を使うのは、該当する会社が明確に一社に絞られる場合だけです。つまり、その名前または名前の先頭部分に一致する会社が一社だけの場合、あるいはその中で現在のティッカーを持つ会社が一社だけの場合です(Alphabet Holding Company ではなく Alphabet Inc.)。それ以外の場合、エラーには候補とその CIK が表示され、find_company では候補が順位付けされて表示されます。
現在、参照情報に含まれない会社に割り当てられているティッカーもあります。XOM は SEC では新しい持株会社 ExxonMobil Holdings Corp(CIK 2115436)のティッカーですが、サーバーは同じ名前の対象提出者である Exxon Mobil Corporation(CIK 34088)を読み取り、その旨を示します。以前のティッカーは一覧にありません。名前で検索する(Twitter)か、CIK を使用してください。
指標の指定
一般名を指定すると、サーバーは会社がその指標に使用してきたタグをたどります。Apple の売上高は、2017 会計年度までは SalesRevenueNet、2018 年以降は RevenueFromContractWithCustomerExcludingAssessedTax でした。Toyota の数値は us-gaap から IFRS に移行しました。各値には、元となったタグが示されます。
| 一般名 | タグ(優先順位順) |
|---|---|
revenue | Revenues, RevenueFromContractWithCustomerExcludingAssessedTax, RevenueFromContractWithCustomerIncludingAssessedTax, SalesRevenueNet, ifrs-full:Revenue, ifrs-full:RevenueFromContractsWithCustomers |
net_income | NetIncomeLoss, ifrs-full:ProfitLossAttributableToOwnersOfParent, ProfitLoss, ifrs-full:ProfitLoss |
operating_income | OperatingIncomeLoss, ifrs-full:ProfitLossFromOperatingActivities |
gross_profit | GrossProfit, ifrs-full:GrossProfit |
eps_diluted, eps_basic | EarningsPerShareDiluted または Basic, ifrs-full:DilutedEarningsLossPerShare または BasicEarningsLossPerShare |
assets, liabilities | Assets または Liabilities、および同名の ifrs-full タグ |
equity | StockholdersEquity, ifrs-full:EquityAttributableToOwnersOfParent, StockholdersEquityIncludingPortionAttributableToNoncontrollingInterest, ifrs-full:Equity |
cash | CashAndCashEquivalentsAtCarryingValue, ifrs-full:CashAndCashEquivalents, CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents |
operating_cash_flow | NetCashProvidedByUsedInOperatingActivities, ifrs-full:CashFlowsFromUsedInOperatingActivities |
diluted_shares | WeightedAverageNumberOfDilutedSharesOutstanding, ifrs-full:AdjustedWeightedAverageShares |
shares_outstanding | dei:EntityCommonStockSharesOutstanding, CommonStockSharesOutstanding |
capex | PaymentsToAcquirePropertyPlantAndEquipment, ifrs-full:PurchaseOfPropertyPlantAndEquipmentClassifiedAsInvestingActivities, PaymentsToAcquireProductiveAssets |
一般的な別表記(sales、revenues、EPS、total_assets)も使用できます。任意の XBRL タグ(AccountsPayableCurrent)も使用できます。既定では us-gaap が使われます。2 つのタクソノミーに存在するタグは両方から読み取られ、プレフィックスを付けると一方を指定できます(us-gaap:Assets、dei:EntityCommonStockSharesOutstanding)。会社が使用をやめたタグを指定すると、後継の系列となる一般名を示す newer_series が返されます。
数値の出所と確認方法
リファレンスに掲載されているすべての企業について、canlicapital.com は SEC の XBRL companyfacts レスポンスをバイト単位でそのまま、gzip スナップショットとして提供し、企業レコードにスナップショットの SHA-256 を記載しています。このサーバーは次の処理を行います。
https://canlicapital.com/api/v1/company-tickers.jsonからティッカーを、/api/v1/company-names.jsonの企業名インデックスから企業名を解決します。/company-data/{CIK}.jsonから企業レコードを読み込みます。- レコードに記載されたスナップショットをダウンロードし、SHA-256 が一致しない場合は拒否します。
- それ以外のすべての処理を、お使いのマシン上で行います。
これらの GET リクエストだけがネットワーク通信です。各結果にはスナップショット(その日付、ハッシュ、URL、および取得元の SEC URL)が記載されているため、SEC から同じファイルを取得して比較できます。スナップショットは企業リファレンスが再公開されると更新されます。各結果の snapshot.age_days で、読み込んだスナップショットの経過日数を確認できます。
ティッカーリスト、企業名インデックス、企業レコードはディスクに保存され、問い合わせなしで 6 時間使用された後、ETag によって再検証されます。サイトに接続できない場合は、ディスク上のコピーが使用されます。ディスク上のキャッシュが温まった状態で、新しいプロセスにおいて企業を最初に呼び出すまでの時間は、当方の測定で 38~72 ms でした(AAPL、JPM、MSFT)。
期間の扱い方:
- 期間は開始日と終了日で表されます。同じ日に終了する四半期の数値と年初来の数値は異なる期間であり、値が混在することはありません。
- 期間が 350~380 日のものは年次として扱います(52 週および 53 週の会計年度を含みます)。期間が 80~125 日のものは四半期として扱い、Kroger の第 1 四半期のような 12~17 週間の四半期も含まれます。それ以外のもの(6 か月および 9 か月の年初来の数値)は、
periods: "all"の場合にのみ表示されます。 - 残高(特定時点の値)は、最初に報告されたレポートの種別に分類されます。期末残高は年次報告書で、期中残高は 10-Q および 6-K で最初に報告されます。
first_reportedは、提出日、次にアクセッション番号の順で最も早い提出書類を示します。as_ofを指定すると、すべての基準において、その日までに提出された書類のみが対象となるため、それ以降に提出された情報が混入することはありません。- 1 件の提出書類で、通常名の 2 つのタグに同じ期間の数値が報告されている場合、その期間を最初に報告したタグの値を使用します。そのため、同じ提出書類内の 2 つ目の定義が改訂として扱われることはありません。
- 提出手数料の添付書類(
ffdタクソノミー)と登録届出書(424B の目論見書、S- および F- フォーム)は除外します。これらには、定期的な業績結果ではない事実が繰り返し記載されているためです。 - 会社が報告した株式分割比率(
StockholdersEquityNoteStockSplitConversionRatio1)と変化が一致する場合、株式分割として認識されます。報告された比率がない場合、1 株当たりの値または株式数が 2~20 の整数倍で変化しているとsplit_likelyとしてマークされます。include_splitsが設定されていない限り、どちらもrestatementsから除外されます。値が変化した後、最初の報告値に戻った場合は一覧に表示せず、changed_then_revertedに計上します。
制限事項
- 値は、各結果で指定されたスナップショットにおいて、SEC の companyfacts API が報告したものです。スナップショットの日付以降に提出された書類は含まれていません。各結果にはスナップショットの
age_daysが示され、as_ofがスナップショットより後の場合はsnapshot_noteにその旨が記載されます。 tag_changeは、最初の値と最新の値が、通常の名前の異なるタグに由来することを意味します。実際の修正再表示の場合も、指標の定義が異なる場合もあります。両方の提出書類を確認してください。- 結果に含まれる行は、最新のものから順に最大 10,000 文字までです。行が切り詰められた場合は
truncatedに示されます。list_conceptsとrestatementsはoffsetでページ分割され、行が残っている場合はnext_offsetが返されます。 filedは、提出書類が EDGAR に到達した日付です。先読みを避けるため、値は提出日の翌取引日から既知のものとして扱ってください。- 値の変更は、修正再表示、再分類、または訂正である可能性があります。該当する提出書類はアクセッション番号で特定できます。
- 対象範囲は Canli の企業リファレンスに含まれる SEC 提出者 12,738 社で、そのうち 5,277 社は現在のティッカー(ティッカー数 6,415)を持っています。対象外の企業を指定すると、その CIK を示すエラーが返されます。
- 企業が報告したデータです。投資助言ではありません。
設定
| 変数 | デフォルト | 説明 |
|---|---|---|
CANLI_CACHE_DIR | ~/.cache/canli-fundamentals | スナップショット(SHA-256 を名前に使用するため、キャッシュ済みファイルが古くなることはありません)と、ティッカーリスト、名前インデックス、レコード(6 時間後に再検証されます)のキャッシュ先です。所有者のみがアクセスできます。ディスクに何も保存しない場合は、空の値を設定してください。メモリには、最近使用した 8 社が保持されます。 |
CANLI_API_BASE | https://canlicapital.com | データの取得元サイトです。 |
Canli MCP ファミリーの一部
- canli-validation-mcp:バックテストが実際のものであるか(deflated Sharpe、過剰適合の確率、最低トラックレコード)を確認します。
- canli-research-mcp:Canli Capital のオープンなリサーチ記録です。
コードは MIT ライセンスです。SEC の提出書類と XBRL の事実データは、パブリックドメインに属する米国政府の著作物です。Canli Capital による選定と派生データは CC BY 4.0 で提供されています(「Canli Capital (canlicapital.com)」とクレジットを表示してください)。
リポジトリ監査の例(Unreleased)
バックテストの開発者は、別途用意された
ローカル stdio の例を通じて、同梱のバージョン監査コアを呼び出せます。
これはクライアントから渡された参照情報、使用状況、設定の各バイト列をそのまま読み込み、選択されたすべての行を保持し、欠落した結果や不確かな結果を明示します。
リポジトリ全体のチェックアウトと、固定されたパッケージ依存関係が必要です。
正式なヘルパーはこの npm パッケージの外部にあります。npx canli-fundamentals-mcp
とホスト型エンドポイントは、引き続き既存の 7 つのツールを公開します。
オプトインのパッケージ監査コマンド(Unreleased)
次回の大規模なファンダメンタルズリリースに向けて、別個の
canli-fundamentals-audit コマンドを準備しています。この候補版には、独自の正式な
ヘルパー、入力提供型コア、stdio アダプターに加えて、入力コントラクトが含まれます。
リポジトリのチェックアウトは不要です。上記の既存のリポジトリ例は変更されず、その元のヘルパーの場所は、この新しいパッケージ版の説明には該当しません。
レビュー済みの候補版 tarball をプライベートインストール先に配置した後、MCP クライアントで
node_modules/.bin/canli-fundamentals-audit への絶対パスを設定し、
コントラクトに記載された 4 つの入力フィールドをそのまま渡してください。このコマンドは audit_inputs ツールを 1 つだけリストします。
canli-fundamentals-mcp とホスト型エンドポイントでは、引き続き既存の 7 つのツールがリストされます。
新しいコマンドは npm に公開されていません。PRIMARY が大規模なリリースを準備している間、version0.5.0 に変更はありません。現在の npm ダウンロードを、この Unreleased コマンドが利用可能である証拠として使用しないでください。
未リリース:オフラインの専門家提出物監査
リポジトリ候補には、独立したオプトインコマンド canli-expert-submission-audit
が追加されています。このコマンドは、指定されたパケットとレビューのバイト列を監査し、選択された分母全体、欠落している役割、人間/専門知識/権利に関する不明な結果を保持します。
単体パッケージの契約と合成 SDK ワークフローを参照してください。
このコマンドは、すでに公開済みの 0.5.0 アーティファクトには含まれていません。デフォルトの
7 ツールサーバーと canli-fundamentals-audit の動作は、従来どおりです。
未リリースの指定ファイル監査クライアント
候補パッケージには、既存のコンパクトな監査を実行するオフラインの便利なコマンド canli-fundamentals-audit-files が追加されています。選択されたすべての行、指定されたバイト列への厳密な紐付け、不明な結果を保持し、所有する唯一の stdio 子プロセスを成功前に終了します。架空のファイルワークフローの全容を参照してください。この候補は npm リリースでも、インストール/採用の測定結果でもありません。
canli-fundamentals-audit-files --root "$PACKAGE_ROOT" --reference "$REFERENCE" --expected-reference-sha256 "$REFERENCE_SHA256" --usage "$USAGE" --settings "$SETTINGS"
すべてのパスは絶対パスでなければなりません。PACKAGE_ROOT は同じ承認済みパッケージを指し、REFERENCE_SHA256 は参照バイト列の厳密なハッシュを固定します。5 つのフラグはそれぞれ 1 回だけ指定します。デフォルトの 7 ツールコマンドと既存の監査コマンドの動作は変わりません。
指定ファイルによる専門家の照合(未リリース)
候補パッケージのコマンド canli-expert-submission-files は、呼び出し元が所有する
ローカルの gold、受付、エビデンス、査読者からの返却ファイルを、変更されていない
専門家提出物コア経由で監査します。EXPERT_SUBMISSION_FILES.md
には、6 つの完全な合成入力ブロックと、専用の排他的出力ワークフローが記載されています。このコマンドは、選択された分母全体、欠落した役割の作業リスト、
厳密な生データの紐付け、人間/専門知識/独立性/権利に関する不明な結果を保持します。SDK 子プロセスもネットワークも必要ありません。これはソース候補です。
変更されていない 0.5.0 のフィールドは、npm での入手可能性や公開の証拠ではありません。
指定ファイルによる専門家 SDK クライアント(未リリース)
オプトインの canli-expert-submission-client は、明示的に指定された非公開ファイルを取り込み、ロックされた SDK2.1 レガシー交渉を通じて既存のローカル専門家 stdio 監査を 1 回呼び出します。
EXPERT_SUBMISSION_CLIENT.md
には、6 つの完全な合成入力とコマンドが記載されています。生データの紐付け、選択されたすべての行、欠落した役割、人間/専門知識/独立性/権利/ラベル/裁定に関する不明な結果を保持しながら、完全なレポートを非公開で保存します。
観測時間 15 秒と、終了/出力/終端用の予備時間 5 秒は、絶対時間の上限を共有します。 エンコード済みのリクエスト/レポート/ツール/フレームの上限は、ネイティブな副作用が発生する前に適用されます。 成功には、同じ子プロセスを確実に終了すること、および排他的な 0600/fsync/読み戻し出力が必要です。 SDK を使用しない直接の専門家ファイルコマンドに変更はありません。このリポジトリ候補と新しいケースは、厳密な新ヘッドでの自動 CI が完了するまでは書かれた状態です。 インストール/公開/採用や、認証済みソースに関する主張は含まれません。
指定ファイルによる専門家受付の準備(未リリース)
オプトインコマンド canli-expert-intake-files は、明示的に指定された 4 つのファイルと、順序付けられた不透明なエビデンスファイル 0~64 件から、完全な専門家受付レポートを準備します。
完全な合成ワークフローはパッケージ内のソースを使用し、SDK 子プロセスを起動しません。選択された N 全体、空欄の査読者パケット、裁定者の作業リストを保持します。実在する人間、専門知識、独立性、権利、ラベル、採用の可否は未検証/NULL のままです。非公開の排他的出力は fsync され、読み戻しも行われます。不確実性がある場合は処理を拒否し、アーティファクトを保持します。これはリポジトリの未リリースソース候補であり、npm での入手可能性やインストールとは別のものです。フィクスチャは、この署名済みソースのリモート CI 前に、記述済み・未実行の状態です。
提供バイト列による専門家インテーク準備(未リリース)
オプトインの canli-expert-intake-prepare コマンドは、提供バイト列の準備コアを通じて、1 つの
filingfacts_prepare_expert_intake ツールを公開します。
パッケージ SDK のワークフロー全体と、マーク付きの合成入力ドキュメント 4 件については、
EXPERT_INTAKE_STDIO.md をご覧ください。このツールは、準備レポート全体、
同一の正解ラベルを持つ空のレビュアーパケット 2 件、および個別の裁定者用作業リストを保持します。選択されたすべての項目と、不足している役割/エビデンスのカバレッジは引き続き確認できます。認証済みの人間、専門知識、独立性、権利、ラベル、採用の有無は不明のままです。
元のリクエストキーと、上限付きのすべての base64 メタデータは、ペイロードをデコードする前に受け入れられます。レポート全体は、構造化コンテンツと正確な JSON テキストの両方で表示されます。 スタンドアロンのエンドポイントでは、射影とシリアル化を通じて同じ絶対時間の処理期限を使用し、その後、ネイティブ書き込みの直前に新たな観測を行います。このガイドでは、上限付きの所有子プロセスの終了処理について説明します。このオプトインコマンドは既存のデフォルトのツールサーフェスとは別であり、ソースの取得、レビュアーの募集、パケットの送信、権利や採用の判断は行いません。
プロンプトとリソース(未リリース)
3 つのプロンプトで、よく使う処理を 1 ステップで実行できます。known_on_date(company、as_of)、restatement_review(company、任意の concept)、peers_as_of(companies、concept、as_of)です。補完に対応するクライアントでは、company は SEC のティッカー一覧から、concept はプレーン名から補完されます。
リソース:canli://concepts はすべてのプレーン名とその背後にあるタグを一覧表示します。canli://limits は引用する制限値を示します。canli://schemas/{tool} はツールの正確な JSON Schema を示します。canli://examples/{language}/{tool} は python、javascript、curl のいずれかで動作する呼び出し例を示します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。