Guides / MCP
MCP
Use Phoenix AI filings, financials and quotes as tools in AI clients such as Claude, ChatGPT and Cursor. A Data API key (ck_live_) opens the Data API tools; a PRO API key or OAuth opens the PRO tools, including conversational research. Each key keeps the plan and limits of its own API.
Which tools your key opens
ck_live_…) opens the Data API tools; a PRO API key (ck_pers_…) or OAuth opens the PRO tools. Calling a PRO tool such as ask_phoenix with a Data API key, or connecting with an API docs session key (ck_docs_…), returns WRONG_KEY_SCOPE. See Connect with a Data API key below.Server details
| Item | Value |
|---|---|
| Server URL | https://www.chickstockfi.com/openapi/pro/v1/mcp |
| Transport | Streamable HTTP (JSON-RPC 2.0), stateless. Only POST is accepted; GET (SSE) and DELETE return 405. |
| Authentication | Data API key (Authorization: Bearer ck_live_…) for the Data API tools · PRO API key (Authorization: Bearer ck_pers_…) or OAuth 2.1 (PKCE · dynamic client registration) for the PRO tools |
| Scope | mcp only. The account's PRO plan decides which tools are available. |
| Required plan | Data API key: a Data API plan (PoC, Launch, Business, Scale or Enterprise). PRO API key or OAuth: a PRO plan (Data, Ask or Bundle). With Data only there are no question tools; with Ask only there are no data tools. |
The OAuth authorization server (issuer) is https://www.chickstockfi.com/openapi/pro/v1. Use the www.chickstockfi.com host for MCP connections.
Connect with a Data API key
Data API customers connect with their Data API key (ck_live_…) in the Authorization header. No PRO API plan is needed. The server URL is the same; the key decides which tools you get.
- Each tool maps to one Data API endpoint. One tool call is one Data API request, counted toward the same daily quota and per-minute limit as REST.
tools/listshows only the tools your key can use. Tools for markets outside your contract are left out (a KR-only account has noget_earnings_calendar). Legacy Free keys getget_news,search_news,grounded_answerandget_api_usageonly.- A result is the REST response body plus
usage:quota(daily),rate_limit(per minute) and, for accounts with an AI call limit (PoC, Launch, Business, Scale),ai_quota. - Error codes and messages are the same as REST, for example
MARKET_NOT_ENTITLED,PLAN_REQUIRED,POC_ENDED,QUOTA_EXCEEDED,RATE_LIMITEDandAI_QUOTA_EXCEEDED. When a PoC ends, the connection itself returns403 POC_ENDED. - OAuth sign-in is for PRO accounts; connect a Data API key with the header. API docs session keys (
ck_docs_…) cannot connect (401 WRONG_KEY_SCOPE), and PRO tools such asask_phoenixreturnWRONG_KEY_SCOPE.
Claude Code
claude mcp add --transport http phoenix-data https://www.chickstockfi.com/openapi/pro/v1/mcp \
--header "Authorization: Bearer $PHOENIX_DATA_KEY"Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"phoenix-data": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://www.chickstockfi.com/openapi/pro/v1/mcp", "--header", "Authorization:${PHOENIX_AUTH}"],
"env": { "PHOENIX_AUTH": "Bearer ck_live_xxxxxxxx" }
}
}
}Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"phoenix-data": {
"url": "https://www.chickstockfi.com/openapi/pro/v1/mcp",
"headers": { "Authorization": "Bearer ck_live_xxxxxxxx" }
}
}
}AI calls
grounded_answer uses one AI call each time the answer model is called. get_disclosure_summary and get_stock_briefing use one only when a new summary or briefing is generated. run_data_query runs without a model and does not count. The limit is your tier's daily AI call limit, shared with REST (Rate limits).
Data API tools
Endpoint paths are under https://api.chickstockfi.com/openapi/v1.
| Tool | Data API endpoint | Markets | Note |
|---|---|---|---|
get_company_financials | GET /companies/{symbol}/financials | KR · US | |
get_company_metrics | GET /companies/{symbol}/metrics | KR · US | |
get_company_segments | GET /companies/{symbol}/segments | KR · US | |
get_company_dividends | GET /companies/{symbol}/dividends | KR · US | |
get_company_consensus | GET /companies/{symbol}/consensus | KR · US | |
get_company_guidance | GET /companies/{symbol}/guidance | KR · US | |
get_us_earnings_surprises | GET /companies/{symbol}/earnings-surprises | US | |
get_us_analyst_ratings | GET /companies/{symbol}/analyst-ratings | US | |
get_company_disclosures | GET /companies/{symbol}/disclosures | KR · US | |
get_net_income_split | GET /companies/{symbol}/net-income-split | KR | |
get_quote | GET /quotes/{symbol} | KR | |
get_disclosure_text | GET /disclosures/{id} | KR | |
get_disclosure_summary | GET /disclosures/{id}/summary | KR | AI call when generated |
get_stock_briefing | GET /briefings/{symbol} | KR | AI call when generated |
get_major_holders | GET /major-holders/{symbol} | KR | |
get_insider_trades | GET /insider-trades/{symbol} | KR | |
get_treasury_stock | GET /treasury/{symbol} | KR | |
get_employees | GET /employees/{symbol} | KR | |
get_credit_ratings | GET /credit-ratings/{symbol} | KR | |
get_dividend_table | GET /dividends/{symbol} | KR | |
get_corporate_actions | GET /corporate-actions[/{symbol}] | KR | |
get_filing_events | GET /events | KR | |
get_ir_calendar | GET /ir-calendar | KR | |
get_ir_materials | GET /ir-materials | KR | |
get_ipo_offerings | GET /ipo-offerings | KR | |
get_ipo_listings | GET /ipo-listings | KR | |
get_clinical_trials | GET /clinical-trials | KR | |
get_earnings_calendar | GET /earnings | US | |
get_economic_calendar | GET /economic-calendar | KR · US | |
get_news | GET /news[/{symbol}] | KR · US | Free keys too |
search_news | GET /search | KR | Free keys too |
grounded_answer | GET /rag | KR · US | AI call · Free keys too |
run_data_query | POST /query | KR · US | |
get_api_usage | GET /key | KR · US | Free keys too |
Connecting each client
Claude Code
# Connect with a PRO API key
claude mcp add --transport http phoenix https://www.chickstockfi.com/openapi/pro/v1/mcp \
--header "Authorization: Bearer $PHOENIX_PRO_KEY"
# Connect with OAuth: add it without a header, then in Claude Code run /mcp → phoenix → Authenticate
claude mcp add --transport http phoenix https://www.chickstockfi.com/openapi/pro/v1/mcpClaude Desktop
To connect without a key, go to Settings → Connectors → Add custom connector, enter the server URL and connect. Log in and approve in the browser, and you are done. To connect with a key, use mcp-remote in claude_desktop_config.json.
claude_desktop_config.json
{
"mcpServers": {
"phoenix": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://www.chickstockfi.com/openapi/pro/v1/mcp", "--header", "Authorization:${PHOENIX_AUTH}"],
"env": { "PHOENIX_AUTH": "Bearer ck_pers_xxxxxxxx" }
}
}
}claude.ai web and apps
Settings → Connectors → Add custom connector → enter the server URL → Connect → log in → approve. OAuth only.
ChatGPT
In developer mode, create an app or connector, enter the same address as the MCP server URL, and choose OAuth for authentication.
Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"phoenix": {
"url": "https://www.chickstockfi.com/openapi/pro/v1/mcp",
"headers": { "Authorization": "Bearer ck_pers_xxxxxxxx" }
}
}
}Other MCP clients
Any client that supports Streamable HTTP needs only the server URL and an Authorization header. You can also check the connection with curl.
curl -s https://www.chickstockfi.com/openapi/pro/v1/mcp \
-H "Authorization: Bearer $PHOENIX_PRO_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'OAuth flow
- When a client calls the server without a key, it gets
401and the protected resource metadata URL. - The client finds the authorization server in the metadata and performs dynamic client registration (
/oauth/register). - The browser goes to
/oauth/authorize, then login, then the consent screen. The consent screen shows the app name, the redirect URL, the account and the features its plan allows. - After approval, the client exchanges the code for tokens (PKCE S256 required). The access token (
ck_mcp_at_…) lasts 1 hour; the refresh token lasts 30 days and is replaced each time it is used. - Approval requires a valid PRO plan. Even after tokens are issued, the plan is checked again on every request.
HTTP/2 401
WWW-Authenticate: Bearer resource_metadata="https://www.chickstockfi.com/openapi/pro/v1/.well-known/oauth-protected-resource/mcp", scope="mcp"| Path | Purpose |
|---|---|
/.well-known/oauth-protected-resource/mcp | Protected resource metadata (RFC 9728) |
/.well-known/oauth-authorization-server | Authorization server metadata (RFC 8414) |
/oauth/register | Dynamic client registration (RFC 7591) |
/oauth/authorize | Authorization request → login and consent |
/oauth/token | Code exchange · token refresh |
/oauth/revoke | Token revocation (RFC 7009) |
All paths are under https://www.chickstockfi.com/openapi/pro/v1. Each account can have 20 live connections; beyond that, the oldest connections are dropped first.
PRO tools (PRO API key · OAuth)
| Tool | Plan product | What it does |
|---|---|---|
search_disclosures | Data | Search Korean and US filings by company, market, period and type, including stored AI summaries |
get_disclosure | Data | Metadata, AI summary and form-extracted values for one filing, plus the original text on request |
get_company_snapshot | Data | Quote, valuation, financial ratios and industry |
get_financials | Data | Financial statement line items (value, unit, report, filing date, link to the original) |
variance_table | Data | Earnings variance table (reported actuals · company guidance · pre-release consensus) |
fact_check | Data | Check sentences containing numbers against the original filing (no model call) |
ask_phoenix | Ask | Ask Phoenix AI PRO a question |
get_ask_result | Ask | Get the result of a question |
get_account_usage | All plans | Plan and usage for today and this month |
PRO limits
- One tool call counts as one daily call, combined with REST calls.
get_ask_resultandget_account_usagedo not count. - Connections made with a key share the same per-second bucket as REST. Each OAuth connection has its own bucket.
- The connection handshake (initialize · tools/list) does not count toward daily calls.
- When you hit a limit, the tool result comes back as an error (
isError) containing a code such asRATE_LIMITEDorDAILY_QUOTA_EXCEEDED. See Errors for what each code means.
If you cannot connect