kiwoom-private-mcp-server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@kiwoom-private-mcp-serverWhat is my current account balance?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π kiwoom-private-mcp-server
ν€μμ¦κΆ REST APIλ₯Ό νμ©νμ¬ μ£Όμ κ³μ’ μ 보 λ° λ³΄μ μ’ λͺ©μ νκ° νν©μ μ‘°νν μ μλ κ°μΈμ© Model Context Protocol (MCP) μλ²μ λλ€. Claude Desktop, Cursor λ± LLM ν΄λΌμ΄μΈνΈμ μ°λνμ¬ AIκ° μ§μ ν¬μ μμ° νν©μ νμ νκ³ μΉν° μ ν©λ λΆμ λ±μ μνν μ μλλ‘ λμ΅λλ€.
π μ£Όμ κΈ°λ₯ (MCP Tools)
get_accounts: μ¬μ©μκ° μ μν ν€μμ¦κΆ κ³μ’ λͺ©λ‘κ³Ό κ° κ³μ’λ³ νκ² μΉν° μ 보λ₯Ό μ‘°νν©λλ€.get_account_balance: νΉμ κ³μ’μ μ΄ νκ° μμ°, κ°λ³ 보μ μ’ λͺ©μ νκ° κΈμ‘, λΉμ€, νλ¨κ° λ° μμ΅λ₯ μ μ‘°νν©λλ€. (μ€μ μλ² API μ°λ λ° λͺ¨μ Mock μ‘°ν μ§μ)
Related MCP server: kiwoom-mcp
π οΈ μꡬ μ¬ν λ° κΈ°μ μ€ν
Python:
3.10μ΄μμμ‘΄μ± λꡬ:
uv: Rust κΈ°λ°μΌλ‘ κ°λ°λ μ΄κ³ μ νμ΄μ¬ ν¨ν€μ§/νλ‘μ νΈ κ΄λ¦¬μ
mcp: Anthropic Model Context Protocol SDKrequests: API HTTP ν΅μ λΌμ΄λΈλ¬λ¦¬python-dotenv: λ‘컬 νκ²½ λ³μ(.env) λ‘λ λΌμ΄λΈλ¬λ¦¬
π¦ μ€μΉ λ° λ‘컬 μ€μ
1. uv λꡬ μ€μΉ (Rust κΈ°λ°μ μ΄κ³ μ ν¨ν€μ§ λ§€λμ )
ν°λ―Έλ(PowerShell λλ bash)μμ μλ λͺ
λ Ήμ΄λ₯Ό μ€ννμ¬ uvλ₯Ό μ€μΉν©λλ€.
Windows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"macOS / Linux:
curl -LsSf https://astral.sh/uv/install.sh | shκΈ°μ‘΄ pipλ₯Ό μ¬μ©νλ κ²½μ°:
pip install uv
2. κ°μνκ²½ κ΅¬μΆ λ° ν¨ν€μ§ μ€μΉ
νλ‘μ νΈ λ£¨νΈ λλ ν 리μμ λ€μ λͺ λ Ήμ μ¬μ©νμ¬ μμ‘΄μ±μ μ΄κ³ μμΌλ‘ λκΈ°νν©λλ€.
# κ°μνκ²½(.venv) μμ±
uv venv
# pyproject.tomlμ μ μλ ν¨ν€μ§ μ€μΉ λ° λ‘컬 νλ‘μ νΈ λΉλ
uv pip install -e .3. νκ²½ μ€μ νμΌ κ΅¬μ±
λ‘컬 보μ λ° κ³μ’ μ 보 λ§€νμ μν΄ μ€μ ν
νλ¦Ώ νμΌλ€μ 볡μ¬νμ¬ μ€μ μ€μ νμΌμ μμ±ν©λλ€. (μ΄ νμΌλ€μ .gitignoreμ λ±λ‘λμ΄ κΉ κ΄λ¦¬μμ λ°°μ λ©λλ€.)
νκ²½ λ³μ νμΌ (
.env) μμ±:.env.exampleνμΌμ 볡μ¬νμ¬.envνμΌμ λ§λ€κ³ ν€μ API μΈμ¦μ νμν AppKey λ° SecretKeyλ₯Ό μ λ ₯ν©λλ€.cp .env.example .envKIWOOM_USE_MOCK=falseλ‘ μ€μ νλ©΄ μ€μ ν€μ API μλ²μμ μ€μκ° μ 보λ₯Ό κ°μ Έμ΅λλ€.trueμΌ κ²½μ° λ΄μ₯λ λͺ¨μ ν¬νΈν΄λ¦¬μ€ μ 보λ₯Ό λ°νν©λλ€.
κ³μ’ λ§€ν μ€μ νμΌ (
accounts_config.json) μμ±:accounts_config.json.exampleνμΌμ 볡μ¬νμ¬accounts_config.jsonνμΌμ λ§λ€κ³ μ¬μ© μ€μΈ κ³μ’ λ²νΈμ κ° κ³μ’λ³λ‘ λΆμ¬νκ³ μ νλ νκ² ν¬μ μΉν°λͺ μ μ λ ₯ν©λλ€.cp accounts_config.json.example accounts_config.json
π» μ€ν λ° μ°λ κ°μ΄λ
1. λ‘컬 λ¨λ ν μ€νΈ
uvλ₯Ό ν΅ν΄ FastMCP μλ²λ₯Ό λͺ
λ Ήμ€μμ μ§μ ꡬλν΄ κΈ°λ μλ¬κ° μλμ§ κ²μ¦ν©λλ€.
uv run mcp_server.pyμλ²κ° μ μμ μΌλ‘ κΈ°λλλ©΄
mcp.server.fastmcpμμ§μ΄ μλνλ©° μ μΆλ ₯ λκΈ° μνλ‘ μ§μ ν©λλ€.
2. Claude Desktop μ°λ μ€μ
Claude Desktop μ±μμ μ΄ μλ²λ₯Ό μΈμν μ μλλ‘ μ€μ νμΌ(config.json)μ μλμ κ°μ΄ μΆκ°ν©λλ€.
μ€μ νμΌ μμΉ:
C:\Users\<μ¬μ©μλͺ >\AppData\Roaming\EasyConnect\config.jsonλλ%APPDATA%\Claude\claude_desktop_config.jsonμ€μ μΆκ° λ΄μ© (Windows μμ):
{
"mcpServers": {
"kiwoom-private-mcp-server": {
"command": "uv",
"args": [
"run",
"--directory",
"c:/Users/moony/home_document/kiwoom-rest-api/kiwoom-private-mcp-server",
"mcp_server.py"
]
}
}
}3. Cursor IDE μ°λ μ€μ
Cursor μ€μ (
Settings->Features->MCP)μΌλ‘ μ΄λν©λλ€.+ Add New MCP Serverλ²νΌμ λλ¦ λλ€.λ€μκ³Ό κ°μ΄ μ λ ₯ν©λλ€:
Name:
kiwoom-private-mcp-serverType:
commandCommand:
uv run --directory c:/Users/moony/home_document/kiwoom-rest-api/kiwoom-private-mcp-server mcp_server.py
π 보μ μ£Όμ μ¬ν
λ³Έ νλ‘μ νΈλ κ°μΈ ν¬μ κ³μ’ λ° λ―Όκ°ν API μΈμ¦ μ 보(
AppKey,SecretKey)λ₯Ό λ€λ£Ήλλ€.μ λ
.envνμΌκ³Όaccounts_config.jsonνμΌμ Public GitHub μ μ₯μμ 컀λ°/νΈμνμ§ μλλ‘ κ°λ³ν μ μν΄ μ£Όμμμ€. (κΈ°λ³Έμ μΌλ‘.gitignoreκ° λ°©μ΄νκ³ μμ΅λλ€.)
Available Tools
2 toolsget_account_balanceA
νΉμ κ³μ’μ μ΄ νκ° μμ° λ° μμΈ λ³΄μ μ’ λͺ© 리μ€νΈ(νκ°κΈμ‘, λΉμ€, νλ¨κ° λ±)λ₯Ό μ‘°νν©λλ€.
Args: account_no: μ‘°νν ν€μμ¦κΆ κ³μ’ λ²νΈ (μ: '61724222') use_mock: Mock λ°μ΄ν°λ₯Ό κ°μ λ‘ μ¬μ©ν μ§ μ¬λΆ (κΈ°λ³Έκ°: None, .envμ KIWOOM_USE_MOCK μ€μ μ λ°λ¦)
Returns: JSON νμμ κ³μ’ μκ³ λ° λ³΄μ μ’ λͺ© λ°μ΄ν°
| Name | Required | Description | Default |
|---|---|---|---|
| use_mock | No | ||
| account_no | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description lacks behavioral disclosures such as authentication requirements, rate limits, error handling, or side effects. With no annotations provided, the description carries the full burden, and it fails to disclose whether the operation is read-only or if it requires prior account setup.
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 concise, front-loaded with the purpose, and structured with clear Args and Returns sections. Every sentence adds value, with no redundant or vague phrasing.
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 presence of an output schema (implied by the Returns description), the description provides adequate information about the return value. However, it omits details on error handling, prerequisites (like account number validity), and the relationship to the sibling tool 'get_accounts'.
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?
Although the schema provides no parameter descriptions (0% coverage), the description compensates by explaining 'account_no' as a Kiwoom securities account number with an example, and 'use_mock' with its default behavior based on environment settings. This adds significant meaning beyond the schema.
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 uses a specific verb 'μ‘°ν' (retrieve) and clearly identifies the resource as a specific account's total evaluation assets and detailed holdings list. It distinguishes itself from the sibling tool 'get_accounts' which likely lists all accounts, thus providing clear differentiation.
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?
While the description explains the parameters, it does not provide explicit guidance on when to use this tool versus alternatives. No when-not-to-use scenarios or preconditions are mentioned, leaving the agent to infer context from the sibling tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_accountsB
μ€μ λ ν€μμ¦κΆ κ³μ’ λͺ©λ‘κ³Ό κ° κ³μ’λ³λ‘ μ§μ λ νκ² μΉν° λ° μμΈ μ€λͺ μ μ‘°νν©λλ€.
Returns: JSON νμμ κ³μ’ λͺ©λ‘ λ°μ΄ν°
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not explicitly state that the tool is read-only or has no side effects. With no annotations, the description should include such 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 short and front-loaded with the purpose. The 'Returns:' line is somewhat redundant given the output schema but does not detract significantly.
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 simplicity of the tool (zero parameters, output schema exists), the description is adequate. However, it misses the chance to contrast with the sibling tool, leaving some context incomplete.
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?
With zero parameters, schema coverage is 100%, so the baseline is 3. The description adds value by specifying that returned data includes target sectors and descriptions, going beyond the schema's lack of parameter info.
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 the tool retrieves a list of accounts with target sectors and descriptions, providing a specific verb and resource. However, it does not differentiate from the sibling 'get_account_balance'.
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 provides no guidance on when to use this tool versus alternatives, lacking any when-not or context cues.
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. Dates show when Glama detected each change.
2 tool updates
v0.1.0- First observed
get_account_balance - First observed
get_accounts
TDQS
The two tools, get_account_balance and get_accounts, have clearly distinct purposes: one retrieves detailed holdings and balance for a specific account, while the other lists all accounts with their metadata. There is no overlap or ambiguity.
Both tool names follow a consistent verb_noun snake_case pattern (get_account_balance, get_accounts). The naming is predictable and clearly indicates the action and resource.
With only two tools, the server is well below the typical 3-15 tool range for a comprehensive service. While the tools are focused, a trading platform like Kiwoom would typically require many more operations (e.g., placing orders, history), making the tool set feel incomplete.
The tool set only covers reading account info (list and balance). For a securities trading server, obvious operations like order management, stock search, and transaction history are missing. This leaves significant gaps that would hinder agent workflows.
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
Query your real net worth, spending, transactions, budgets and portfolio from any MCP client.
MCP server giving AI agents one-connection access to China A-share market intelligence: financials,
Unlock the power of real-time financial data with our Finance MCP. Easily retrieve the latest
MCP server exposing the Backtest360 engine API as tools for AI agents.
Related MCP Servers
- AlicenseCqualityDmaintenanceProvides comprehensive Taiwan stock market data and analysis through MCP tools. Enables querying real-time stock prices, historical data, company information, technical analysis, and market overviews for TWSE and TPEx listed companies.815MIT
- FlicenseAqualityDmaintenanceAn MCP server that enables natural language control of Kiwoom Securities accounts through Claude Desktop. It provides tools for stock price lookup, buying and selling stocks, and analyzing portfolios or trade history via the Kiwoom REST API.112-

pykrx-mcpofficial
AlicenseNot gradedqualityCmaintenanceProvides Korean stock market data (KOSPI, KOSDAQ, KONEX) including prices, fundamentals, investor trading, short selling, and indices via MCP protocol, enabling natural language queries from AI agents like ChatGPT and Claude.3MIT- AlicenseAqualityAmaintenanceRead-only MCP server for Kiwoom Securities, enabling natural language queries of Korean stock market data and account information, including ISA tax status.493221MIT
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/moony211/kiwoom-private-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server