AI 프레임워크 연동
LangChain · Vercel AI SDK · LlamaIndex 에서 XBOSS MCP 도구를 붙이는 코드입니다.
프레임워크마다 MCP 어댑터가 있습니다. 주소와 Authorization 헤더만 넘기면 도구 목록을 그대로 받아 에이전트에 붙일 수 있습니다.
아래 코드의 CLIENT_ID · CLIENT_SECRET 자리에 발급받은 값을 넣습니다.
LangChain
bash
pip install langchain-mcp-adapters langchain langchain-openaixdata_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())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}',
'X-MCP-Env-Scope': 'real_test',
},
}
}
)
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/openaixdata-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();
}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}`,
'X-MCP-Env-Scope': 'real_test',
},
},
});
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-mcpxdata_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())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}',
'X-MCP-Env-Scope': 'real_test',
},
)
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 오류 코드에서 코드를 찾습니다.