edinet-mcp
The server provides MCP tools to access normalized financial data (JPY) from ~3,600 listed Japanese non-financial companies sourced from EDINET annual reports, without requiring API keys or setup.
search_company: Find companies by English or Japanese name or 4-digit securities code, returning code, name, industry, and accounting standard.
get_financials: Retrieve up to 17 key income statement, balance sheet, and cash flow items for a single company by code, along with metadata like accounting standard, fiscal year, and consolidation status. Unavailable items are listed with reasons.
compare_companies: Compare two or more companies side-by-side on selected metrics (default: revenue, operating income, net income, total assets, total equity, operating cash flow) and get derived operating/net margin percentages.
list_companies: Browse or filter the company universe by industry (substring) and/or accounting standard (IFRS, Japanese GAAP, US GAAP) with pagination.
All data is pre-normalized with English keys, values are in absolute JPY, and the server is read-only with runtime validation and freshness warnings.
edinet-mcp
保守停止・非推奨 / Maintenance discontinued — deprecated (2026-07-29). This project is no longer maintained. The market has moved to a point where equivalent functionality — normalized EDINET financial data for Japanese listed companies — is available for free from existing services, so there is no longer a sustainable reason to maintain an independent offering built on the same freely available public data. The repository stays public as a reference implementation, but no further updates, fixes, or data refreshes will be published.
Recommended alternative: edinetdb.jp — please use it for current, maintained EDINET data.
Ask your MCP client (Claude Desktop, etc.) about Japanese company financials in plain English — income statement, balance sheet and cash-flow items for ~3,600 listed Japanese (non-financial) companies, normalized to English keys and JPY, sourced from Japan's FSA EDINET annual securities reports. For analysts, investors and developers who want EDINET numbers without an API key, XBRL parsing, or Japanese tag names.
Data attribution: EDINET (Financial Services Agency, Japan). Not investment advice.
How this differs from other EDINET / Japan-finance MCP servers
Typical EDINET integrations wrap the official EDINET v2 API directly. That means each user must issue an API key, and each request pulls filing archives whose XBRL still has to be parsed and mapped. This server takes a different trade-off:
Zero setup. No API key, no signup, no rate limit. Read-only against a pre-built public JSON dataset (
https://edinet-api-base.pages.dev/api/) — no re-fetching from EDINET at query time, no local database.Pre-normalized, comparable output. English keys, absolute JPY, accounting standard auto-detected (IFRS / Japanese GAAP / US GAAP), consolidation and source document included. Items that don't exist under a company's standard come back as
nullwith a reason — never approximated.Defensive by default. Every upstream response is schema-validated at runtime (Ajv). If the dataset ever changes shape, tools return a structured
upstream_invaliderror instead of crashing or passing through garbage, and responses carry afreshness_warningwhen the underlying data is older than a threshold (EDINET_STALE_DAYS, default 30 days).Comparison built in.
compare_companiesreturns side-by-side values plus derived operating/net margins, so a single tool call answers the common "A vs B" question.
Related MCP server: EDINET DB MCP Server
Quick start
Run from source (60 seconds, no npm publish required):
git clone https://github.com/reanimatedead/edinet-mcp.git && cd edinet-mcp
npm install && npm run buildAdd to claude_desktop_config.json
(~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"edinet": { "command": "node", "args": ["/absolute/path/to/edinet-mcp/dist/server.js"] }
}
}Restart Claude Desktop. Then try:
"Compare Toyota and Nintendo's operating margins."
Claude will call search_company → compare_companies and answer with real figures, e.g.
Toyota (7203) operating margin ≈ 7.4%, Nintendo (7974) ≈ 15.6% (FY ending 2026-03, values in JPY).
Once the package is published to npm, the zero-clone alternative is:
{
"mcpServers": {
"edinet": { "command": "npx", "args": ["-y", "edinet-mcp"] }
}
}Honest limitations
Annual reports only. Figures come from annual securities reports (有価証券報告書), latest fiscal year per company. No quarterly data, no historical time series.
Non-financial companies only (~3,600). Banks, insurers and securities firms are excluded because their statement structure differs.
Freshness depends on the upstream dataset. This server does not re-fetch from EDINET; it serves what the static dataset contains. Responses include a
freshness_warningonce data age exceeds the threshold, but staleness itself can't be fixed on this side.Single upstream host. The public JSON lives on one CDN-backed host. Runtime validation makes failures explicit and structured, but there is no fallback mirror.
Cross-standard comparability has limits. Normalization is faithful to each company's accounting standard; items that don't exist under a standard are
nullwith a reason. Comparing IFRS vs J-GAAP lines is on you.Not investment advice. Values are as filed; derived ratios are presentation-only arithmetic on served values.
Tools
Tool | What it does |
| Find companies by name (EN/JA) or 4-digit code. Resolve a name → code. |
| Up to 17 income-statement / balance-sheet / cash-flow items + metadata for one company. |
| Compare 2+ companies on selected metrics; also returns derived |
| Browse/filter the universe by |
Tool usage examples
search_company — resolve a name/code to companies:
{ "name": "search_company", "arguments": { "query": "Toyota", "limit": 3 } }
// → { results: [ { sec_code: "7203", name_en: "TOYOTA MOTOR CORPORATION", accounting_standard: "IFRS", ... } ] }get_financials — 17 items + metadata for one company:
{ "name": "get_financials", "arguments": { "code": "7974" } }
// → { company:{sec_code:"7974", name_en:"Nintendo Co., Ltd."},
// fiscal_year:{accounting_standard:"Japanese GAAP", ...},
// flat_values:{ revenue: 2313051000000, operating_income: 360117000000, ... },
// unavailable:[ { key:"equity_attributable_to_owners", reason:"..." } ] }compare_companies — side-by-side + derived margins:
{ "name": "compare_companies", "arguments": { "codes": ["7203", "7974"] } }
// → companies: [
// { code:"7203", values:{revenue:50684952000000, operating_income:3766216000000, ...},
// derived_ratios:{ operating_margin_pct: 7.43, net_margin_pct: ... } },
// { code:"7974", ..., derived_ratios:{ operating_margin_pct: 15.57 } } ]list_companies — browse/filter the universe:
{ "name": "list_companies", "arguments": { "accounting_standard": "US GAAP", "limit": 10 } }
// → { total_matched: 5, results: [ { sec_code:"6301", name_en:"KOMATSU LTD." }, ... ] }All monetary values are in JPY (absolute yen). derived_ratios are computed from the served values (presentation only — no re-extraction).
Configuration
EDINET_API_BASE_URL(optional): override the data source base (defaulthttps://edinet-api-base.pages.dev/api).EDINET_STALE_DAYS(optional): data-age threshold in days forfreshness_warning(default30).
Development
npm run dev # run from source (tsx)
npm test # unit tests (mocked fetch, offline)
npm run typecheck
npm run build # → dist/
node scripts/mcp-smoke.mjs # end-to-end MCP client smoke against live dataCI (GitHub Actions) runs typecheck, tests and build on every push/PR. Publishing to
npm is a separate, manual-only workflow (workflow_dispatch) — nothing publishes
automatically.
Publishing to npm — HUMAN_ACTION_REQUIRED
npm publish needs an authenticated npm account (browser/OTP) — it cannot be automated here.
The package is publish-ready (build output in dist, bin, files, English README). Steps:
cd edinet-mcp
npm login # HUMAN: browser/OTP auth
npm run build # ensure dist/ is fresh
npm publish --access publicAfter publishing, Option A (npx -y edinet-mcp) works for everyone.
Where to find it
MCP Registry:
io.github.reanimatedead/edinet-mcp(manifest:server.json, validate withnpm run validate:server).awesome-mcp-servers: listed under Finance & Fintech.
Auto-indexed by Glama / PulseMCP (public repo,
mcptopic). Submission status & steps:docs/mcp-listing.md.
License
MIT. Underlying data © their sources; usage follows the EDINET terms of use.
Available Tools
4 toolscompare_companiesCompare companiesA
Compare multiple companies side by side on selected metrics (default: revenue, operating_income, net_income, total_assets, total_equity, operating_cash_flow). Also returns derived_ratios (operating_margin_pct, net_margin_pct) computed from the served values. All monetary values in JPY.
| Name | Required | Description | Default |
|---|---|---|---|
| codes | Yes | Two or more 4-digit codes, e.g. ['7203','7974'] | |
| metrics | No | English metric keys to compare (default: common set) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description is the sole source. It states it computes derived ratios and returns metrics in JPY, but does not disclose error handling, rate limits, or behavior for missing data. Adequate but could be more transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: first states purpose and default metrics, second adds derived ratios and currency. No wasted words, front-loaded with key info.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description covers returned metrics and currency but omits output structure (e.g., array of company objects). For a comparison tool with moderate complexity, it is mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema documentation covers both parameters fully (100% coverage). The description adds value by explaining default metrics, derived ratios, and currency, providing context beyond the schema's property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool compares multiple companies side by side on selected metrics, lists default metrics (revenue, operating_income, etc.), and notes derived ratios and currency (JPY). This clearly distinguishes it from siblings (get_financials for single company, list_companies for listing, search_company for search).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates when to use the tool (for comparing companies on metrics) but does not explicitly state when not to use it or provide exclusions. However, given sibling tool names, the usage context is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_financialsGet financial statementsA
Get the main income statement, balance sheet and cash-flow items (up to 17, in JPY) plus metadata (accounting standard IFRS/JGAAP/US GAAP, consolidation, fiscal year, source document) for one company by 4-digit code. Items unavailable under the company's standard are listed with a reason (no approximation).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | 4-digit securities code, e.g. '7203' (Toyota) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description effectively discloses behaviors: returns up to 17 items, in JPY, includes metadata (accounting standard, consolidation, fiscal year, source document), and lists unavailable items with a reason. It lacks mention of read-only status or rate limits but provides solid transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences convey all essential information: what is retrieved, quantity, currency, metadata, and behavior for missing items. No redundancy or filler; every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description thoroughly explains return values: financial statement components, item count, currency, metadata fields, and handling of unavailable items. It is self-contained and adequate for agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the 'code' parameter already described as a 4-digit securities code. The description adds a concrete example ('7203' Toyota) but does not add significant new semantics beyond the schema, so baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves financial statements (income, balance sheet, cash-flow) with metadata for one company using a 4-digit code. It specifies up to 17 items in JPY and distinguishes from siblings by focusing on a single company's financials.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for getting a specific company's financials but does not explicitly exclude use cases or compare to siblings like compare_companies for multiple companies. Usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_companiesList companiesA
List companies filtered by industry (substring match, e.g. 'Automobiles', 'Pharmaceuticals') and/or accounting_standard ('IFRS', 'Japanese GAAP', 'US GAAP'). Paginated. Use to browse the ~3,600-company universe.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 50, max 500) | |
| offset | No | Pagination offset | |
| industry | No | Industry substring filter | |
| accounting_standard | No | 'IFRS' | 'Japanese GAAP' | 'US GAAP' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It mentions pagination, substring match for industry, and exact values for accounting_standard. However, it does not describe default ordering, return fields, or whether the tool is read-only. For a listing tool without output schema, more behavioral detail would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and 35 words, extremely concise with no redundant information. It front-loads the core action ('List companies filtered by...') and includes essential details without extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 optional parameters, no output schema, and no annotations, the description covers filtering and pagination adequately. However, it lacks details about the return structure (e.g., fields returned) and does not clarify default behavior when no filters are applied. The universe size context is helpful but not sufficient for full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter has a schema description. The description adds value by clarifying that industry is a 'substring match' and providing examples ('Automobiles', 'Pharmaceuticals'), and listing all accounting_standard values. This goes beyond the schema, enhancing parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists companies with filtering options. It specifies the verb 'list' and the resource 'companies'. While it does not explicitly contrast with siblings like compare_companies or search_company, the mention of 'browse the ~3,600-company universe' implies a broad browsing use case, distinguishing it from more specific tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Use to browse the ~3,600-company universe,' providing some usage context. However, it does not specify when not to use this tool or mention alternatives directly. The sibling names give implicit guidance, but explicit exclusion is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_companySearch companyA
Search listed Japanese (non-financial) companies by name (English or Japanese) or 4-digit securities code. Returns matching companies with code, English name, industry and accounting standard. Use this to resolve a name to a code.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 20) | |
| query | Yes | Company name (EN/JA) or securities code, e.g. 'Toyota' or '7203' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes a search operation returning data, which is non-destructive, but does not explicitly state read-only behavior, auth requirements, or rate limits. The description is adequate but lacks deeper behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, consisting of two sentences with no unnecessary words. It is front-loaded with the core action and then provides usage guidance. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema, the description mentions the returned fields (code, English name, industry, accounting standard), which is complete for a search tool. The parameters are well-described, and sibling tools are available in context. Minor gap: no mention of pagination or max results beyond the limit parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both parameters described in the schema. The description adds value by explaining that the query can be a name in English or Japanese or a 4-digit securities code, and specifies the return fields. This goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches listed Japanese companies by name or code, returning matching companies with specific fields. It uses a specific verb 'search' and resource 'company', and distinguishes from sibling tools like compare_companies, get_financials, and list_companies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Use this to resolve a name to a code,' providing clear usage guidance. It does not explicitly list exclusions or alternatives, but the context signals for sibling tools help. Overall, the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a distinct and non-overlapping purpose: search_company resolves names to codes, list_companies filters by criteria, get_financials retrieves detailed financials for one company, and compare_companies compares multiple companies. No ambiguity.
All tool names follow a consistent verb_noun pattern using snake_case: search_company, list_companies, get_financials, compare_companies. This is predictable and clear.
With only 4 tools, the server is well-scoped for its purpose of accessing Japanese company financial data. Each tool serves a necessary function without redundancy or bloat.
The set covers the key workflows: discovering companies (search and list), retrieving financial data (get_financials), and comparing metrics (compare_companies). A minor gap might be the lack of time-series or direct filing access, but the core is solid.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Remote MCP for Japan's EDINET DB — 3,800 listed companies' financials & filings (OAuth)
The financial MCP for AI agents - 90+ financial tables, SEC filings, signals, alt-data.
SEC EDGAR financials, insider trading, and economic data for AI agents. US GAAP + IFRS.
Provide AI assistants with real-time access to official SEC EDGAR filings and financial data. Enab…
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceProvides programmatic access to Japan's EDINET system to search for listed companies and retrieve annual or quarterly financial reports. It parses XBRL filings into structured data, enabling AI assistants to analyze balance sheets, income statements, and cash flows.18Apache 2.0
- AlicenseAqualityBmaintenanceStructured financial data for ~3,800 Japanese listed companies from EDINET regulatory filings — financials, major shareholders, segments, executive compensation, and corporate history. Remote MCP over HTTPS with OAuth 2.0, free tier.131MIT
- AlicenseNot gradedqualityCmaintenanceCompound MCP agent that integrates EDINET, TDNET, e-Stat, and stock price sources for comprehensive Japanese company analysis, macro economic snapshots, and earnings monitoring through a single interface.2Apache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables access and analysis of Japanese corporate financial data (PL/BS/CF) via EDINET API. Supports searching companies, listing reports, and comparing financials through natural language queries.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/reanimatedead/edinet-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server