Skip to main content
Glama
kwonsw812

kiwoom-mcp

by kwonsw812

place_buy_order

Execute stock purchase orders for Kiwoom Securities accounts. Supports market or limit orders by specifying stock code, quantity, and price.

Instructions

주식 매수 주문을 실행합니다. 시장가 또는 지정가 매수를 지원합니다

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
stock_codeYes종목코드 (예: 005930)
quantityYes주문 수량
priceNo주문 가격 (시장가일 경우 0)
order_typeNo주문유형: market(시장가) 또는 limit(지정가)market
account_noNo계좌번호 (미입력시 기본 계좌 사용)

Implementation Reference

  • The actual API interaction implementation for placing a buy order.
    async placeBuyOrder(accountNo: string, stockCode: string, quantity: number, price: number, orderType: string) {
      const trde_tp = orderType === "market" ? "3" : "0";
      const body: Record<string, unknown> = {
        acc_no: accountNo,
        dmst_stex_tp: "KRX",
        stk_cd: stockCode,
        ord_qty: String(quantity),
        trde_tp,
      };
      if (orderType === "limit") {
        body.ord_uv = String(price);
      }
      return this.request("/api/dostk/ordr", "kt10000", body);
    }
  • src/index.ts:663-690 (registration)
    The MCP tool definition and registration for place_buy_order, including input schema and tool handler logic.
    server.tool(
      "place_buy_order",
      "주식 매수 주문을 실행합니다. 시장가 또는 지정가 매수를 지원합니다",
      {
        stock_code: stockCodeSchema,
        quantity: z.number().int().positive().describe("주문 수량"),
        price: z.number().int().min(0).default(0).describe("주문 가격 (시장가일 경우 0)"),
        order_type: z.enum(["market", "limit"]).default("market").describe("주문유형: market(시장가) 또는 limit(지정가)"),
        account_no: accountNoSchema,
      },
      { readOnlyHint: false, idempotentHint: false },
      async ({ stock_code, quantity, price, order_type, account_no }) => {
        try {
          const acct = resolveAccountNo(account_no);
          if (order_type === "limit" && price <= 0) {
            return errorContent("지정가 주문 시 가격을 0보다 큰 값으로 입력해주세요.");
          }
          const data = await client.placeBuyOrder(acct, stock_code, quantity, price, order_type);
          const orderNo = data.ord_no ?? "N/A";
          const typeLabel = order_type === "market" ? "시장가" : `지정가 ${formatCurrency(price)}`;
          let text = `## 매수 주문 완료\n\n`;
          text += `- 주문번호: ${orderNo}\n`;
          text += `- 종목코드: ${stock_code}\n`;
          text += `- 주문유형: ${typeLabel}\n`;
          text += `- 주문수량: ${quantity}주\n`;
          if (IS_MOCK) text += "\n(모의투자 주문)\n";
          return textContent(text);
        } catch (error) {
Behavior3/5

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

Annotations already indicate this is a non-readOnly, non-idempotent operation (write/mutation). The description adds that it supports both market and limit orders, which is useful behavioral context beyond annotations. However, it doesn't disclose other important traits like authentication requirements, rate limits, or what happens on failure.

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?

The description is appropriately concise with two short sentences that convey the core functionality. It's front-loaded with the primary purpose. No wasted words, though it could potentially benefit from slightly more detail given the tool's complexity.

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 financial transaction tool with no output schema and annotations only covering read/write/idempotency, the description is minimally adequate. It covers what the tool does but lacks important context about return values, error conditions, authentication requirements, and relationship to sibling tools.

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?

With 100% schema description coverage, the schema already documents all 5 parameters thoroughly. The description mentions market vs limit order support (relating to 'order_type' and 'price'), but adds minimal semantic value beyond what's in the schema descriptions. Baseline 3 is appropriate when schema does the heavy lifting.

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 the action ('주식 매수 주문을 실행합니다' - executes stock buy orders) and resource (stocks), making the purpose evident. It distinguishes from sibling 'place_sell_order' by specifying 'buy' but doesn't explicitly differentiate from other trading-related tools like 'cancel_order' or 'get_unfilled_orders'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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. It doesn't mention prerequisites (like needing an authenticated account), when not to use it, or how it relates to sibling tools like 'place_sell_order' or 'cancel_order'.

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

Install Server

Other Tools

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/kwonsw812/kiwoom-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server