Skip to main content
Glama
naver-stock-mcp

naver-stock-mcp

by koreapyj

naver-stock-mcp

An MCP server for Naver Stock Research, a collection of Korean brokerage research reports. It lets a model find relevant reports and return their Naver detail page URL (detailUrl) and original PDF URL (pdfUrl).

Install and build

npm install
npm run build

Requires Node.js 20.18 or later.

Related MCP server: Korean Stock MCP

Running

Local (stdio)

node dist/index.js

Example config for an MCP client such as Claude Desktop or Claude Code:

{
  "mcpServers": {
    "naver-research": {
      "command": "node",
      "args": ["/path/to/naver-stock-mcp/dist/index.js"],
      "env": { "HTTPS_PROXY": "http://proxy.example.com:8080" }
    }
  }
}

Streamable HTTP

node dist/index.js --transport http --port 3000 --host 127.0.0.1
# or: MCP_TRANSPORT=http MCP_PORT=3000 node dist/index.js
  • Endpoint: http://<host>:<port>/mcp (POST, stateless)

  • Health check: GET /health

  • Binding to 127.0.0.1 or localhost enables DNS rebinding protection. When binding to 0.0.0.0, set MCP_ALLOWED_HOSTS to the Host headers you accept. The server has no authentication; if you expose it, put authentication in front of it (for example, a reverse proxy).

claude mcp add --transport http naver-research http://127.0.0.1:3000/mcp

Docker

Images are published to GitHub Packages from main without tags, so pull them by digest. The digest of each build is shown in the workflow run summary.

docker run --rm -p 3000:3000 \
  -e MCP_ALLOWED_HOSTS=localhost,127.0.0.1 \
  -e HTTPS_PROXY=http://proxy.example.com:8080 \
  ghcr.io/koreapyj/naver-stock-mcp@sha256:<digest>

The image runs the Streamable HTTP transport on 0.0.0.0:3000 by default. Set MCP_ALLOWED_HOSTS to the Host headers clients use, to keep DNS rebinding protection.

Environment variables

Real environment variables take precedence. A .env file in the working directory is also loaded if present (see .env.example).

Variable

Description

Default

MCP_TRANSPORT

stdio or http

stdio

MCP_HOST / MCP_PORT / MCP_PATH

HTTP bind settings

127.0.0.1 / 3000 / /mcp

MCP_ALLOWED_HOSTS

Allowed Host headers, comma-separated

-

HTTP_PROXY / HTTPS_PROXY

Proxy for outbound requests to Naver. Lowercase names and user:pass@ credentials are supported

-

NO_PROXY

Hosts that bypass the proxy

-

NAVER_TIMEOUT_MS

Request timeout

15000

NAVER_USER_AGENT

User-Agent override

Chrome UA

DOTENV_PATH

Path of the env file to load

.env

All Naver endpoints use HTTPS, so HTTPS_PROXY is usually the only one you need.

Tools

Tool

Description

search_research

Search reports by category, keyword, stock (name or code), industry, broker (name or code), date range and page. Every result has detailUrl; with includePdf: true each also gets pdfUrl.

get_research

Get one report: full summary, pdfUrl, detailUrl, target price, previous target price, and stock price on the publication date

find_stock

Look up stock codes by name

list_brokers

List brokers and their codes

list_industries

List industry keys and Korean names for industry reports

Categories:

Category

Contents

Web path

market

Market commentary

/research/daily

invest

Investment strategy

/research/invest

company

Company/stock analysis

/research/company

industry

Industry analysis

/research/industry

economy

Economic analysis

/research/economy

debenture

Bonds/fixed income

/research/debenture

Example arguments for search_research (Samsung Electronics reports from Mirae Asset):

{ "category": "company", "stocks": ["삼성전자"], "brokers": ["미래에셋"], "size": 5, "includePdf": true }

Reports, stock names and broker names are in Korean, so Korean search terms give the best results.

Testing

npm run smoke                              # stdio
npm run smoke -- http://127.0.0.1:3000/mcp # a running HTTP server

Notes

This server calls the undocumented API that the Naver Stock website itself uses (stock.naver.com/api/stockSecurity/researches/v2/*). It may stop working if Naver changes that API. Research reports are the property of their publishers; follow Naver's and the publishers' terms when using them.

License

Copyright (C) 2026 Yoonji Park koreapyj@dcmys.kr

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program (see LICENSE). If not, see https://www.gnu.org/licenses/.

Available Tools

5 tools
find_stockFind Stock CodeA

Look up stock codes by name using Naver Stock autocomplete. Korean stock names work best.

NameRequiredDescriptionDefault
limitNo
queryYesFull or partial stock name

TDQS

A3.5/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 does disclose meaningful behavior by naming the backing service ('Naver Stock autocomplete'), implying live external calls and fuzzy/prefix matching, but it omits rate limits, ambiguity handling, and whether exact matches are guaranteed. That is useful but incomplete disclosure for an unannotated tool.

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 short sentences, front-loaded with the core action and followed by the one practically important caveat about Korean names. Nothing is padded or redundant.

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?

For a simple two-parameter lookup with no output schema, the description covers the essentials of what the tool does, but it never indicates the shape of the result (e.g., codes paired with names) or the role of the limit parameter. An agent would know how to call it but not fully what to expect back.

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 50%: 'query' is documented in the schema as 'Full or partial stock name', and the description's 'by name' merely reinforces it. The 'limit' parameter (default 10, max 20) has no description anywhere, and the description does not explain what limit controls or how results are ordered.

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 states a specific verb and resource ('look up stock codes by name') and names the underlying mechanism ('Naver Stock autocomplete'), which is enough to tell it apart from siblings like search_research or list_brokers that cover different domains. It stops short of explicitly contrasting itself with any sibling, so it lands at 4 rather than 5.

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?

'Korean stock names work best' gives a usability hint about the intended input domain, which implies when the tool is useful. However, there is no explicit when-to-use versus alternatives guidance, no statement of what to do when the lookup fails, and no mention that this is a name-to-code resolver rather than a price or data lookup.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_researchGet Research ReportA

Get one research report: full summary text, original PDF URL (pdfUrl) and Naver detail page (detailUrl). Company reports also include the target price, previous target price and the stock price on the publication date. Take category and nid from search_research results.

NameRequiredDescriptionDefault
nidYesReport ID (nid from search_research results)
categoryYesmarket = market commentary; invest = investment strategy; company = company/stock analysis; industry = industry analysis; economy = economic analysis; debenture = bond/fixed income

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations and no output schema, the description carries the full disclosure burden and does substantial work: it names the returned fields and calls out that company reports conditionally include target price, previous target price, and publication-date stock price. It omits error/not-found behavior and any auth or rate-limit context, which is the main residual gap.

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?

Three tight sentences, front-loaded with the operation and its return shape, ending with the sourcing prerequisite. No filler and no repetition of schema content.

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?

For a two-parameter read tool with no annotations or output schema, the description adequately covers inputs' origin and the conditional return fields. It stops short of covering failure modes (unknown nid, invalid category) or whether the summary is truncated, which would round it out.

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 description coverage is 100% and the category enum is fully spelled out in the schema, so the description needn't repeat it. The description adds only the provenance hint that both parameters come from search_research, and implicitly signals that category=company changes the response shape — useful but marginal against a complete schema.

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?

States a specific verb and resource ('Get one research report') and immediately enumerates the payload: summary text, pdfUrl, detailUrl, plus company-specific pricing fields. This clearly distinguishes it from search_research, which is named as the discovery counterpart.

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 closing sentence 'Take category and nid from search_research results' tells the agent this is the second step in a flow and where the required keys come from. It doesn't state exclusions or failure behavior, but the intended usage context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_brokersList BrokersA

List the brokerages and institutions that publish research, with their codes.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the disclosure burden, and 'List' plus a zero-argument schema reasonably communicates a read-only enumeration. However, it says nothing about whether the catalogue is complete, static, or paginated, and gives no indication of ordering or how many entries an agent should expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, stating the action, the resource and the key returned attribute. It is appropriately sized for a trivial zero-argument tool, though it could name the code field explicitly.

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?

With zero parameters and no output schema, the description is nearly sufficient, but a small gap remains: the agent does not learn the shape of the response (names vs. codes, ordering, completeness) beyond the one clause 'with their codes'. For a simple enumeration tool this is adequate rather than 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?

The tool takes no parameters, so there is no parameter semantics to explain and the baseline of 4 applies. The description's only relevant contribution is clarifying that the output pairs each institution with its code, which is outside schema scope here.

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 gives a specific verb and resource ('List the brokerages and institutions that publish research') plus the returned field ('with their codes'), so the intent is unambiguous. It does not explicitly contrast itself with siblings, though none of search_research, get_research, find_stock or list_industries overlap in an ambiguous way.

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?

Usage is only implied: an agent can infer this is the reference/lookup tool to call when it needs a broker identifier before searching research. There is no statement of when to prefer it over a search or lookup via another tool, and no mention of prerequisites such as whether an identifier from this list is required elsewhere.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_industriesList IndustriesA

List the industry keys and Korean names usable as filters for category=industry.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the disclosure burden. It does reveal the return contents (keys plus Korean names), but it says nothing about whether the list is static or live, whether any auth is needed, or how large it is. For a zero-parameter read-only enumeration the risk is low, so a 3 reflects adequate but thin disclosure.

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?

A single front-loaded sentence with zero filler. Every clause earns its place by naming the resource, the return contents, and the intended use.

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?

For a simple no-argument enumeration with no output schema, the description covers what the tool does and what it yields. Only a hint about the size or stability of the list would make it fully 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?

The tool takes zero parameters, so there is no parameter meaning to add; baseline 4 applies. The description still usefully characterizes the output shape as key/name pairs, which aids correct downstream filter construction.

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?

States a specific verb and resource ('List the industry keys and Korean names') and adds scope: these values are filters for category=industry. That distinguishes it from the research/stock lookup siblings without naming them explicitly, though an explicit pointer to search_research would have earned a 5.

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 phrase 'usable as filters for category=industry' tells the agent exactly when to reach for this tool: to resolve valid industry filter values before a search. No exclusions or alternatives are mentioned, but the usage context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_researchSearch Naver Stock ResearchA

Search brokerage research reports on Naver Stock (stock.naver.com/research). Reports are mostly in Korean. Every result has detailUrl (the Naver detail page); set includePdf=true to also get pdfUrl (the original PDF). Results are sorted newest first. Categories: market = market commentary; invest = investment strategy; company = company/stock analysis; industry = industry analysis; economy = economic analysis; debenture = bond/fixed income. For reports on specific stocks use category=company with stocks; for specific sectors use category=industry with industries. query is a keyword search over titles and summaries (Korean keywords work best).

NameRequiredDescriptionDefault
pageNoPage number, starting at 1
sizeNoResults per page (max 50)
queryNoKeyword to search in titles and summaries
stocksNoStock names or 6-character stock codes (only applied when category=company), e.g. ['삼성전자', '000660']
brokersNoBroker names or codes, e.g. ['미래에셋', 'KB증권', '57']. See list_brokers
endDateNoLatest publication date (YYYY-MM-DD)
categoryYesmarket = market commentary; invest = investment strategy; company = company/stock analysis; industry = industry analysis; economy = economic analysis; debenture = bond/fixed income
startDateNoEarliest publication date (YYYY-MM-DD)
includePdfNoIf true, makes one extra request per result to attach pdfUrl. Slower, so keep size small
industriesNoIndustry keys or Korean names (only applied when category=industry), e.g. ['semiconductor', '제약']. See list_industries
summaryCharsNoMax characters of each report's summary to include (0 omits it)

TDQS

A3.9/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 carry the full behavioral burden; it does disclose sort order (newest first), that reports are mostly Korean, that every result carries detailUrl, and that includePdf triggers one extra request per result and is therefore slower. It omits pagination behavior/total counts, rate limits, and any auth expectations, so meaningful gaps remain for an 11-parameter tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what the tool does and where it searches, then moves through output shape, sorting, categories, and category-specific guidance in a compact block. The category list duplicates the schema enum text verbatim, which is the one wasteful segment.

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?

With 11 parameters, no annotations and no output schema, the description does substantial work: source, language, sort order, URL fields, PDF cost tradeoff, and category usage. It still leaves the result object shape (title, broker, date, truncated summary via summaryChars) and pagination semantics unexplained, which matters given there is no output schema.

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 description coverage is 100%, so the baseline is 3; the description largely repeats what the schema already states about query, stocks/scoping and category values. The only genuine additions are that query matches titles and summaries with Korean working best, and the detailUrl/pdfUrl implication of includePdf.

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?

States a specific verb and resource (search brokerage research reports) plus the exact source (stock.naver.com/research), and implicitly separates itself from get_research, list_brokers and list_industries by naming those helpers for broker/industry lookup. An agent can tell what this returns without opening any schema.

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?

Gives concrete routing rules: category=company with stocks for single stocks, category=industry with industries for sectors, and notes Korean keywords work best. However, it never says when to stop searching and call get_research for a single report, nor does it mention prerequisites or exclusions for the other categories.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv1.0.0
    • First observedfind_stock
    • First observedget_research
    • First observedlist_brokers
    • First observedlist_industries
    • First observedsearch_research

TDQS

A4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct role: search_research vs get_research separate discovery from detail retrieval, and find_stock, list_brokers, and list_industries are non-overlapping lookup helpers. An agent can easily select the right tool for each task.

Naming Consistency5/5

All names follow a consistent snake_case verb_noun pattern (search_research, get_research, find_stock, list_brokers, list_industries). The verbs are standard and predictable.

Tool Count5/5

Five tools are well-scoped for a research-report browsing server: two core operations plus three supporting lookups. No tool feels redundant or extraneous.

Completeness4/5

The research workflow is covered end-to-end: search by category/keyword, fetch full report details with PDF, and resolve stock/broker/industry filters. Minor gap: no tool for current stock quotes or price history, though the server is focused on research reports.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides access to Naver Search APIs, allowing AI agents to search across multiple categories (blogs, news, books, images, shopping items, etc.) with structured responses optimized for LLM consumption.
    13
    4
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides access to Korean stock market data, including stock listings, daily historical records, and 10-minute intraday candles via FinanceDataReader and Naver APIs. It enables users to search for stocks, retrieve detailed profiles, and calculate technical indicators locally.
    -
  • A
    license
    A
    quality
    C
    maintenance
    Provides tools for discovering, downloading, parsing, and searching Korean DART financial reports, enabling AI assistants to access Open DART data through structured tools.
    6
    16 PyPI
    2
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to search Korean DART corporate disclosures, financial statements, ownership filings, and fully parsed XBRL, while converting HWP/PDF attachments into markdown. It also provides analyst-style frames such as insider trading signals, accounting-risk scoring, and Buffett-style quality checklists for comparing companies.
    746 npm
    MIT