ForcedAlpha
AIエージェント向けポートフォリオ・サプライチェーン調査:依存関係のマッピング、共通エクスポージャーの調査、供給ショックの追跡、ボトルネックの発見。
ホスト型 MCP サーバー
npx add-mcp 'https://forcedalpha.com/mcp/'Claude Code、Codex、Cursor などにインストールできます
ドキュメント
Use the supply chain graph in your agent.
Model Context Protocol (MCP) lets an AI client call ForcedAlpha graph tools. Call tools/list and capabilities for the current manifest, access rules, and limits.
Start with the public static files: inspect the agent quickstart and dated snapshot before signing in. The snapshot is not a live response or anonymous evaluation.
The public streamable HTTP address is https://forcedalpha.com/mcp/. The same service also answers at https://mcp.forcedalpha.com/. A /mcp path on that subdomain is not live yet.
Get an API key
Create a free account or sign in. Your dashboard shows your application programming interface (API) key. MCP accepts an OAuth bearer token from a connector or an API key in the X-API-Key header. OAuth is a sign-in flow: your AI client sends you to ForcedAlpha to approve access.
Enter your email and we send a sign-in link that opens your dashboard with your API key; new emails get a free account, with no card or password needed.
Keep the key out of URLs and shared configuration files. A connector can complete the authorization flow without a key in its URL.
Connect
Add https://forcedalpha.com/mcp/ as a remote MCP server in a client that supports streamable HTTP and OAuth. Sign in or supply your API key on the ForcedAlpha authorization page. Then enable the connector in a conversation and ask: “Does Lasertec supply TSMC?”
The older https://forcedalpha.com/mcp/sse address remains a legacy server-sent events (SSE) path. Use the streamable HTTP address for new connections.
Claude
In Claude's connector settings, add a custom connector named ForcedAlpha with URL https://forcedalpha.com/mcp/. Leave the optional OAuth client ID and secret blank so Claude can discover the authorization flow. Complete the ForcedAlpha approval page, then enable the connector in the conversation.
ChatGPT
In ChatGPT's connector settings, create a custom MCP connector named ForcedAlpha. Set the URL to https://forcedalpha.com/mcp/ and choose OAuth. Complete the ForcedAlpha authorization page, then enable the connector in the chat. Do not append an API key to the URL.
Claude Desktop
Settings → Connectors → Add custom connector. Set the name to ForcedAlpha and the URL to https://forcedalpha.com/mcp/. Leave the OAuth client ID and secret blank. Complete the ForcedAlpha authorization page when prompted, then enable the connector in a conversation.
Claude Desktop: config file (npx)
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Use this route only if you manage MCP servers by editing the config file directly rather than through the Connectors UI. Add a forcedalpha entry inside mcpServers. mcp-remote bridges the config-file transport to the server's streamable HTTP endpoint and opens a browser window for the OAuth approval on first connect. The config needs no key.
{
"mcpServers": {
"forcedalpha": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://forcedalpha.com/mcp/"
]
}
}
}
Restart Claude Desktop after saving. To use an API key instead of the OAuth browser flow (for example on a headless machine), add a header argument instead of relying on the browser step:
{
"mcpServers": {
"forcedalpha": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://forcedalpha.com/mcp/",
"--header",
"X-API-Key:fa_YOUR_KEY_HERE"
]
}
}
}
Never put the key in the URL. A key passed as a ?key= query parameter is written into server access logs in plain text. Pass it as a header, as shown above, or use the OAuth Connectors path instead.
If it didn't work
- No tool icon after restart. Cause: JSON syntax error in the config, or Node.js not installed. Action: validate the JSON, confirm
node -vworks in a terminal, fully quit and restart Claude Desktop. - Browser window doesn't open for OAuth. Cause:
mcp-remoteopens a local port for the sign-in callback, and a firewall can block it. Action: allow the port, or switch to the API-key config above. - Tool calls return an auth error with a new key. Cause: the key was mistyped, or it has not reached the server. Action: copy the key again from your dashboard, restart Claude Desktop, and if it still fails, write to [email protected] before generating a second key.
Claude Code
Claude Code (CLI)
Terminal. No config file to edit.
One command, using the OAuth flow (opens a browser to approve access on first use):
claude mcp add --transport http forcedalpha https://forcedalpha.com/mcp/
Or with an API key, passed as a header:
claude mcp add --transport http forcedalpha https://forcedalpha.com/mcp/ \
--header "X-API-Key: fa_YOUR_KEY_HERE"
Verify it was added:
claude mcp list
The server is now available in Claude Code sessions in that scope. Use claude mcp remove forcedalpha to disconnect.
If it didn't work
- Command not found, or the connection fails immediately. Action: confirm you're on a Claude Code version that supports
--transport http; older versions only supportsse. claude mcp listshows the server but tool calls fail. Cause: the key has a typo or has not reached the server, or the OAuth approval wasn't completed. Action: remove and re-add the server with the key copied again; if it still fails, contact support.
Cursor
Cursor
.cursor/mcp.json in your project root, or ~/.cursor/mcp.json for global config
Cursor's MCP config supports an HTTP server type with headers directly, so it needs no mcp-remote bridge:
{
"mcpServers": {
"forcedalpha": {
"url": "https://forcedalpha.com/mcp/",
"headers": {
"X-API-Key": "fa_YOUR_KEY_HERE"
}
}
}
}
Restart Cursor after saving. The tools appear in the Composer context list. If your Cursor version doesn't support the headers field, use the mcp-remote config shown for Claude Desktop above instead, substituted into .cursor/mcp.json.
If it didn't work
- Tools don't appear in Composer. Cause: config file in the wrong location, or a JSON syntax error. Action: confirm the path (project-level takes precedence over the global config), validate the JSON, fully restart Cursor.
- Connection error right after setup. Cause: the key has a typo or has not reached the server. Action: copy the key again, restart Cursor, and contact support if it still fails.
Gemini CLI
Gemini CLI
~/.gemini/settings.json
{
"mcpServers": {
"forcedalpha": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://forcedalpha.com/mcp/",
"--header",
"X-API-Key:fa_YOUR_KEY_HERE"
]
}
}
}
Create ~/.gemini/ if it does not exist. Start a new Gemini CLI session after saving. The tools load when it starts. Existing sessions don't pick up config changes.
If it didn't work
- Tools don't load on session start. Cause: a JSON syntax error, or the settings file isn't in the expected location. Action: validate the JSON and confirm the path, then start a fresh session.
- Auth error on first tool call. Cause: the key has a typo or has not reached the server. Action: copy the key again, start a fresh session, and contact support if it still fails.
Tools and parameters
This is a dated September 30 reference. In the parameters column, required parameters come before the semicolon and optional ones after it. Live tools/list is authoritative; the capabilities response sets further access rules and limits.
| Tool | Purpose | Parameters |
|---|---|---|
capabilities | Discover the active tools, access rules, and limits | none |
forcedalpha_query | Route a supported natural-language graph request | query; selection, request_id, deadline_ms, option_token |
forcedalpha_brief | Compatibility entry point for a natural-language request | query; audience, mode |
search_nodes | Find candidate graph nodes | query; node_type, theme, severity_min, limit, detail |
verify_edge | Check one directed relationship | from_id, to_id; relationship, product, material_form, temporal_scope, detail |
verify_claim | Check a plain-English relationship claim | claim |
verify_path | Check an ordered path | path_nodes; audience, direction |
path_between | Find paths from a consumer toward an upstream supplier or material | from_id, to_id; k, max_hops, include_soft_signal, audience |
screen_company_list | Screen an ordered list of companies | entities; max_depth, dependency_scope, minimum_evidence_grade, require_source_url, include_rejected, shared_minimum_members, ledger_detail, audience, deadline_ms |
portfolio_common_mode | Find shared direct dependencies across holdings | tickers; top_n, audience, mode, evidence, projection, detail |
portfolio_xray | Find bounded upstream paths across holdings | tickers; max_hops, top_n, audience, mode, evidence, projection, detail |
co_product_contagion | Trace supply or demand coupling from a byproduct | seed_id; shock_type |
trace_shock | Trace a physical shock through admitted graph paths | event; portfolio, mode, audience, max_depth, evidence_filter, require_primary, target_domain, seed_node_ids, scenario_id |
shock_brief | Build an evidence-separated shock brief | event; portfolio, mode, audience, max_depth, evidence_filter, evidence_mode |
watchlist_from_shock | Build a monitoring watchlist from a shock | event; max_items, audience, evidence_mode |
find_chokepoints | Find high-severity graph nodes | theme, severity_min, country, market_cap_max, theme_match |
trace_dependency | Traverse dependencies from a node | node_id; direction, max_depth |
find_customers | Find customers of a node | node_id; limit, theme, theme_match, audience, include_below_gate |
find_critical_nodes | Rank mapped upstream constraint paths from the sealed sidecar; this is a mapped-coverage view, not a centrality or real-world-criticality score | none; rank_by, theme, severity_min, country, market_cap_max, limit, audience, theme_match, allowed_types, track |
supply_chokepoints | List sealed Track A chokepoints in sidecar order; downstream dependents are separate from inputs, and Track B is withheld with its reason | none; mode, target, track, limit |
Older tools no longer appear in the tool list. A client that cached an old list gets TOOL_CONTAINED if it calls one.
Example prompts
These are things you can type in a conversation once the connector is enabled. The client picks the matching tool and parameters; you don't need to call the tool by name.
capabilities
"What can the ForcedAlpha graph tell me, and what's my current usage?"
forcedalpha_query / forcedalpha_brief
"Ask ForcedAlpha: does Lasertec supply TSMC, and what evidence backs that?"
search_nodes
"Search the graph for companies in the AI theme with severity 4 or higher."
verify_edge
"Verify whether LASERTEC supplies TSMC directly in the graph."
verify_claim
"Check this claim against the graph: 'Bloom Energy depends on PEM membranes.'"
verify_path
"Verify this path: NVDA to TSMC to gallium. Does each hop connect?"
path_between
"Find the path from NVDA upstream to gallium in the supply chain graph."
screen_company_list
"Screen this list for common upstream dependencies: NVDA, AMD, AMAT, LRCX."
portfolio_common_mode
"Which of these holdings share a direct upstream dependency: NVDA, AMD, AMAT?"
portfolio_xray
"Trace upstream paths across my portfolio: NVDA, AMD, TSM, AXTI."
co_product_contagion
"If gallium ore supply is disrupted, what byproduct or co-product effects follow?"
trace_shock
"China restricts gallium exports. Trace the impact through the graph."
shock_brief
"Build a brief on the impact if China restricts gallium exports."
watchlist_from_shock
"Build a watchlist of companies exposed if China restricts gallium exports."
find_chokepoints
"Find severity 4+ chokepoints in the AI theme with market cap under $10B."
trace_dependency
"What does AXTI depend on upstream?"
find_customers
"Who are the downstream customers of AXTI in the graph?"
Evidence grades
Every graph edge has a confidence grade that describes how the evidence behind it was verified, not how important the relationship is:
A
B
C
D
A: the source page was fetched, a verbatim quote of at least 40 characters was found on it, no check has found that the quote contradicts the edge's claim or direction, and the source is a strict primary record: a regulatory filing, a government filing, or the company's own site.
B: a source URL is on file and a citation exists, but the evidence didn't clear the full A bar: the quote wasn't captured or byte-checked yet, the source isn't strict-primary, or an A-grade edge decayed because its source date is old.
C: a middle confidence band. The edge is reported from a source, but no verbatim quote has been captured against it.
D: low confidence. This covers edges inferred from graph structure, edges that failed a direction or claim check, and sourced edges whose confidence is still low.
Roughly a third of edges in the graph are primary or direct-sourced today; the rest carry a lower grade and are labeled as such. MCP analysis tools return the grade of each edge they cite. The grade does not change how a query is answered: a chokepoint search still returns matching nodes regardless of their edges' grades; check the grade on the specific evidence you plan to rely on.
Plans
Free and Pro use the same graph and the same evidence standard. Pro raises the volume limits and adds downstream traversal; it doesn't change what counts as verified.
| Plan | Full analyses / month | Requests / day | Notes |
|---|---|---|---|
| Free | 10 | 500 | On MCP, verification tools (verify_edge, verify_claim, verify_path) do not count against the monthly quota. Downstream traversal is Pro. |
| Pro | ~1,000 | No daily cap | Going over the monthly reference number does not block requests. |
| Enterprise | Custom | No daily cap | Graph traversal to depth 6. Contact sales for terms. |
These limits apply per API key on the MCP server. Every MCP request also counts toward a limit of 120 requests per 60 seconds, on every plan. The same key works on the REST API, but REST keeps its own counters and has its own per-route limits, listed on the REST API page. See pricing for current prices.
Evidence and incomplete answers
Each result carries its evidence where it exists: source URL, verbatim quote, grade and verification state. It also says what the answer does not cover. A path marked quarantined or missing is unverified, so do not report it as a supply relationship. The verification tools return their own verdict with the evidence behind it.
Limits and errors
Free accounts have 10 full analyses per calendar month. Pro includes about 1,000 queries a month, and going over does not block requests. The service also checks 120 requests per 60 seconds per key and a 500-request daily limit for Free; Pro and Enterprise have no daily cap in the MCP service. Call capabilities for the current limits on each tool.
Tool-level refusals use an object with ok: false, code, message, and retry, sometimes with hint or detail. An unknown node can use UNKNOWN_ID with an additional resolution verdict. Sign-in and rate failures come back as HTTP errors. A rate or daily-limit failure returns HTTP 429 with an error message. A contained tool returns TOOL_CONTAINED.