Skip to main content
Glama

edinet-mcp

CI npm version MCP Registry License: MIT

WARNING

保守停止・非推奨 / 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 null with 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_invalid error instead of crashing or passing through garbage, and responses carry a freshness_warning when the underlying data is older than a threshold (EDINET_STALE_DAYS, default 30 days).

  • Comparison built in. compare_companies returns 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 build

Add 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_companycompare_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_warning once 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 null with 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

search_company

Find companies by name (EN/JA) or 4-digit code. Resolve a name → code.

get_financials

Up to 17 income-statement / balance-sheet / cash-flow items + metadata for one company.

compare_companies

Compare 2+ companies on selected metrics; also returns derived operating_margin_pct / net_margin_pct.

list_companies

Browse/filter the universe by industry and/or accounting_standard.

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 (default https://edinet-api-base.pages.dev/api).

  • EDINET_STALE_DAYS (optional): data-age threshold in days for freshness_warning (default 30).

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 data

CI (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 public

After 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 with npm run validate:server).

  • awesome-mcp-servers: listed under Finance & Fintech.

  • Auto-indexed by Glama / PulseMCP (public repo, mcp topic). Submission status & steps: docs/mcp-listing.md.

License

MIT. Underlying data © their sources; usage follows the EDINET terms of use.

Available Tools

4 tools
compare_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
codesYesTwo or more 4-digit codes, e.g. ['7203','7974']
metricsNoEnglish metric keys to compare (default: common set)

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYes4-digit securities code, e.g. '7203' (Toyota)

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default 50, max 500)
offsetNoPagination offset
industryNoIndustry substring filter
accounting_standardNo'IFRS' | 'Japanese GAAP' | 'US GAAP'

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default 20)
queryYesCompany name (EN/JA) or securities code, e.g. 'Toyota' or '7203'

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

A4.1/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivitySlowing
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides 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.
    18
    Apache 2.0
  • A
    license
    A
    quality
    B
    maintenance
    Structured 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.
    13
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Compound 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.
    2
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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.
    1
    MIT

Latest Blog Posts

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