개발자 문서
개발자 문서

AI 프레임워크 연동

LangChain · Vercel AI SDK · LlamaIndex 에서 XBOSS MCP 도구를 붙이는 코드입니다.

프레임워크마다 MCP 어댑터가 있습니다. 주소와 Authorization 헤더만 넘기면 도구 목록을 그대로 받아 에이전트에 붙일 수 있습니다.

아래 코드의 CLIENT_ID · CLIENT_SECRET 자리에 발급받은 값을 넣습니다.

LangChain

bash
pip install langchain-mcp-adapters langchain langchain-openai
xdata_langchain.py
python
# pip install langchain-mcp-adapters langchain langchain-openai
import asyncio, base64
from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain.agents import create_agent

AUTH = base64.b64encode(b'CLIENT_ID:CLIENT_SECRET').decode()

async def main():
    client = MultiServerMCPClient(
        {
            'xdata': {
                'transport': 'streamable_http',
                'url': 'https://api.xdata.kr/mcp',
                'headers': {
                    'Authorization': f'Basic {AUTH}',
                },
            }
        }
    )
    tools = await client.get_tools()
    agent = create_agent('openai:gpt-4o', tools)
    result = await agent.ainvoke({'messages': '질문 입력'})
    print(result['messages'][-1].content)

asyncio.run(main())

Vercel AI SDK

bash
npm install ai @ai-sdk/mcp @ai-sdk/openai
xdata-vercel-ai.ts
typescript
// npm install ai @ai-sdk/mcp @ai-sdk/openai
import { createMCPClient } from '@ai-sdk/mcp';
import { generateText, isStepCount } from 'ai';
import { openai } from '@ai-sdk/openai';

const auth = Buffer.from('CLIENT_ID:CLIENT_SECRET').toString('base64');

const mcp = await createMCPClient({
  transport: {
    type: 'http',
    url: 'https://api.xdata.kr/mcp',
    headers: {
      Authorization: `Basic ${auth}`,
    },
  },
});

try {
  const tools = await mcp.tools();
  const { text } = await generateText({
    model: openai('gpt-4o'),
    tools,
    stopWhen: isStepCount(5),
    prompt: '질문 입력',
  });
  console.log(text);
} finally {
  await mcp.close();
}

generateText 는 기본적으로 한 단계만 실행합니다. 도구 결과까지 받아 답변을 만들려면 예시처럼 여러 단계를 허용해야 합니다.

LlamaIndex

bash
pip install llama-index llama-index-tools-mcp
xdata_llamaindex.py
python
# pip install llama-index llama-index-tools-mcp
import asyncio, base64
from llama_index.tools.mcp import BasicMCPClient, McpToolSpec

AUTH = base64.b64encode(b'CLIENT_ID:CLIENT_SECRET').decode()

async def main():
    client = BasicMCPClient(
        'https://api.xdata.kr/mcp',
        headers={
            'Authorization': f'Basic {AUTH}',
        },
    )
    tool_spec = McpToolSpec(client=client)
    tools = await tool_spec.to_tool_list_async()
    print([t.metadata.name for t in tools])

asyncio.run(main())

어느 도구를 부를지

도구 이름은 tools/list 결과에 있습니다. 이름은 XBOSS 작업(action)의 점을 밑줄 두 개로 바꾼 형태입니다 — 예: hometax.session.login 은 hometax__session__login 입니다.

오류가 나면 MCP 오류 코드에서 코드를 찾습니다.