kra-mcp
If you are the rightful owner of kra-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
The KRA Racing Data Analysis MCP Server utilizes the Korea Racing Authority's public API to analyze horse racing data and provide insights.
KRA Racing Data Analysis MCP Server
ํ๊ตญ ๋ง์ฌํ(Korea Racing Authority) ๊ณต๊ณต API๋ฅผ ํ์ฉํ ๊ฒฝ๋ง ๋ฐ์ดํฐ ๋ถ์ MCP ์๋ฒ
์ด ํ๋ก์ ํธ๋ Model Context Protocol (MCP)์ ์ฌ์ฉํ์ฌ ํ๊ตญ ๋ง์ฌํ์ ๊ฒฝ๋ง ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ณ ์ธ์ฌ์ดํธ๋ฅผ ์ ๊ณตํ๋ ์๋ฒ์ ๋๋ค.
๐ ์ฃผ์ ๊ธฐ๋ฅ
๐ง ๋ถ์ ๋๊ตฌ (Tools)
- analyze-race: ๊ฒฝ์ฃผ ๋ถ์ (๋ ์ง, ๊ฒฝ์ฃผ๋ฒํธ, ๊ฒฝ๋ง์ฅ๋ณ)
- analyze-horse-performance: ๋ง ์ฑ์ ๋ถ์ ๋ฐ ํผ ํ๊ฐ
- get-jockey-stats: ๊ธฐ์ ํต๊ณ ๋ฐ ์ฑ๊ณผ ๋ถ์
- get-jockey-info: ๊ธฐ์ ์ ๋ณด ์กฐํ
- analyze-odds: ๋ฐฐ๋น๋ฅ ๋ถ์ ๋ฐ ํจํด ์ธ์
๐ ๋ฐ์ดํฐ ๋ฆฌ์์ค (Resources)
- schedule://{date}: ๊ฒฝ์ฃผ ์ผ์ ์ ๋ณด (์ค๋/๋ด์ผ)
- horses://{horseName}: ๋ง ์์ธ ์ ๋ณด ๋ฐ ๊ธฐ๋ก
- tracks://{trackCode}: ๊ฒฝ๋ง์ฅ ์ ๋ณด (์์ธ/๋ถ์ฐ/์ ์ฃผ)
- config://kra-api: KRA API ์ค์ ๋ฐ ๊ตฌ์ฑ
๐ฌ ๋ถ์ ํ๋กฌํํธ (Prompts)
- predict-race: ๊ฒฝ์ฃผ ์์ธก ๋ถ์ (๊ธฐ๋ณธ/์์ธ/ํต๊ณ)
- horse-performance-report: ๋ง ์ฑ์ ์์ธ ๋ฆฌํฌํธ
- market-analysis: ๋ง๊ถ ์์ฅ ๋ถ์ (๋ฐฐ๋น๋ฅ /๊ฑฐ๋๋/ํธ๋ ๋)
๐ฏ ํ์ฉ ๋ถ์ผ
- ๊ฒฝ์ฃผ ์์ธก: ๋ฐ์ดํฐ ๊ธฐ๋ฐ ๊ฒฝ์ฃผ ๊ฒฐ๊ณผ ์์ธก
- ํฌ์ ๋ถ์: ๋ง๊ถ ํฌ์ ์ ๋ต ์๋ฆฝ
- ์ฑ๊ณผ ํ๊ฐ: ๋ง, ๊ธฐ์, ์กฐ๊ต์ฌ ์ฑ๊ณผ ๋ถ์
- ์์ฅ ๋ถ์: ๋ฐฐ๋น๋ฅ ๋ฐ ๊ฑฐ๋๋ ํจํด ๋ถ์
- ๋ฆฌ์คํฌ ๊ด๋ฆฌ: ํฌ์ ๋ฆฌ์คํฌ ํ๊ฐ ๋ฐ ๊ด๋ฆฌ
๐ฆ ์ค์น ๋ฐ ์ค์
ํ์ ์๊ตฌ์ฌํญ
- Node.js 18.0.0 ์ด์
- npm ๋๋ yarn
- ํ๊ตญ ๋ง์ฌํ ๊ณต๊ณต API ์ ๊ทผ ๊ถํ โ ์ค์ ์ฐ๋ ์๋ฃ
KRA API ํค ์ค์ (ํ์)
-
๊ณต๊ณต๋ฐ์ดํฐํฌํธ ์ ์ฒญ
- ๊ณต๊ณต๋ฐ์ดํฐํฌํธ ์ ์
- "ํ๊ตญ๋ง์ฌํ ๊ฒฝ์ฃผ๊ธฐ๋ก ์ ๋ณด" API ๊ฒ์ ๋ฐ ์ ์ฒญ
- ์น์ธ ํ ์๋น์คํค ๋ฐ๊ธ๋ฐ๊ธฐ
-
ํ๊ฒฝ๋ณ์ ์ค์
# Windows (PowerShell) $env:KRA_SERVICE_KEY="YOUR_SERVICE_KEY_HERE" # macOS/Linux export KRA_SERVICE_KEY="YOUR_SERVICE_KEY_HERE" # ๋๋ .env ํ์ผ ์์ฑ echo "KRA_SERVICE_KEY=YOUR_SERVICE_KEY_HERE" > .env
-
์๋น์คํค ํ์ธ
- URL ์ธ์ฝ๋ฉ๋ ํค๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค
- ํน์๋ฌธ์๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ์ธ์ฝ๋ฉ ํ์
ํ๋ก์ ํธ ์ค์น
# ์ ์ฅ์ ํด๋ก
git clone <repository-url>
cd kra-racing-data-mcp-server
# ์์กด์ฑ ์ค์น
npm install
# KRA API ํค ์ค์ (์ ์ฐธ์กฐ)
export KRA_SERVICE_KEY="your_service_key"
๐โโ๏ธ ์คํ ๋ฐฉ๋ฒ
๊ฐ๋ฐ ๋ชจ๋
npm run dev
๊ฐ์ ๋ชจ๋ (ํ์ผ ๋ณ๊ฒฝ ์ ์๋ ์ฌ์์)
npm run watch
ํ๋ก๋์ ๋น๋ ๋ฐ ์คํ
npm run build
npm start
๐ง MCP ํด๋ผ์ด์ธํธ ๋ฑ๋ก
Cursor IDE์์ ์ฌ์ฉ
~/.cursor/mcp.json
ํ์ผ์ ์ถ๊ฐ:
{
"mcpServers": {
"kra-racing-analysis": {
"command": "npx",
"args": ["tsx", "C:/Users/SONG/kra-racing-data-mcp-server/src/index.ts"]
}
}
}
ํ๋ก๋์ ๋ฒ์ ์ฌ์ฉ ์:
{
"mcpServers": {
"kra-racing-analysis": {
"command": "node",
"args": ["C:/Users/SONG/kra-racing-data-mcp-server/dist/index.js"]
}
}
}
Cursor ์ฌ์์ ํ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
๐งช ํ ์คํธ ๋ฐ ๊ฒ์ฆ
MCP Inspector ์ฌ์ฉ
npx @modelcontextprotocol/inspector npx tsx src/index.ts
๋๊ตฌ ํ ์คํธ ์์
# ๊ฒฝ์ฃผ ๋ถ์ ํ
์คํธ
analyze-race --raceDate="2024-01-15" --raceNumber="3" --trackCode="seoul"
# ๋ง ์ฑ์ ๋ถ์ ํ
์คํธ
analyze-horse-performance --horseName="์ฐ์น๋ง" --period="1year"
๐ ํ๋ก์ ํธ ๊ตฌ์กฐ
kra-racing-data-mcp-server/
โโโ src/
โ โโโ index.ts # ๋ฉ์ธ ์๋ฒ ํ์ผ
โโโ dist/ # ๋น๋๋ JavaScript ํ์ผ
โโโ package.json # ํ๋ก์ ํธ ์ค์
โโโ tsconfig.json # TypeScript ์ค์
โโโ .gitignore # Git ์ ์ธ ํ์ผ
โโโ README.md # ํ๋ก์ ํธ ๋ฌธ์
๐ ์ฌ์ฉ ์์
1. ๊ฒฝ์ฃผ ๋ถ์ ์์ฒญ
{
"method": "tools/call",
"params": {
"name": "analyze-race",
"arguments": {
"raceDate": "2024-01-15",
"raceNumber": 5,
"trackCode": "seoul"
}
}
}
2. ๋ง ์ ๋ณด ์กฐํ
{
"method": "resources/read",
"params": {
"uri": "horses://์ฐ์น๋ง"
}
}
3. ๊ฒฝ์ฃผ ์์ธก ํ๋กฌํํธ
{
"method": "prompts/get",
"params": {
"name": "predict-race",
"arguments": {
"raceDate": "2024-01-15",
"raceNumber": "5",
"analysisType": "detailed"
}
}
}
๐ ๏ธ ๊ฐ๋ฐ ๊ฐ์ด๋
์๋ก์ด ๋ถ์ ๋๊ตฌ ์ถ๊ฐ
server.tool("new-analysis-tool",
{
param1: z.string(),
param2: z.number().optional()
},
async ({ param1, param2 }) => ({
content: [{
type: "text",
text: `๋ถ์ ๊ฒฐ๊ณผ: ${param1} ${param2 || ''}`
}]
})
);
์๋ก์ด ๋ฐ์ดํฐ ๋ฆฌ์์ค ์ถ๊ฐ
server.resource(
"new-resource",
new ResourceTemplate("resource://{id}", { list: undefined }),
async (uri, { id }) => ({
contents: [{
uri: uri.href,
text: JSON.stringify({ id, data: "..." }, null, 2)
}]
})
);
๐ API ์ฐ๋ ํํฉ
โ ํ์ฌ ์ฐ๋๋ API:
- ํ๊ตญ ๋ง์ฌํ ๊ณต๊ณต API: ๊ฒฝ์ฃผ ์ ๋ณด, ์ถ์ ๋ง ๋ฐ์ดํฐ, ๊ธฐ์ ์ ๋ณด
- API214_1: ๊ฒฝ์ฃผ ์์ธ ๊ฒฐ๊ณผ ๋ฐ ๋ถ์ ๋ฐ์ดํฐ
- API12_1: ๊ธฐ์ ์ ๋ณด ์กฐํ
- API299: ๊ฒฝ์ฃผ ํต๊ณ ๋ฐ ์์ธก ์ ๋ณด
โณ ํฅํ ์ฐ๋ ์์ :
- ์ค์๊ฐ ๋ฐฐ๋น๋ฅ API: ๋ฐฐ๋น๋ฅ ๋ณํ ์ถ์
- ๊ธฐ์ ์ ๋ณด API: ์ฃผ๋ก ์ํ ์ํฅ ๋ถ์
๐ ๋ฐ์ดํฐ ๋ถ์ ๊ธฐ๋ฅ
์ง์ํ๋ ๋ถ์ ์ ํ
- ๊ธฐ์ ์ ๋ถ์: ๊ณผ๊ฑฐ ์ฑ์ ๊ธฐ๋ฐ ํจํด ๋ถ์
- ํต๊ณ์ ๋ถ์: ํ๋ฅ ๋ชจ๋ธ ๋ฐ ํ๊ท ๋ถ์
- ์์ฅ ๋ถ์: ๋ฐฐ๋น๋ฅ ๋ฐ ๊ฑฐ๋๋ ๋ถ์
- ๋น๊ต ๋ถ์: ๋ง, ๊ธฐ์, ์กฐ๊ต์ฌ ๊ฐ ๋น๊ต
์์ธก ๋ชจ๋ธ (๊ณํ)
- ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ: ๊ณผ๊ฑฐ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์์ธก
- ์์๋ธ ๋ชจ๋ธ: ๋ค์ค ๋ชจ๋ธ ๊ฒฐํฉ ์์ธก
- ์ค์๊ฐ ๋ถ์: ๊ฒฝ์ฃผ ๋น์ผ ์ค์๊ฐ ๋ฐ์ดํฐ ๋ถ์
๐ ๋ณด์ ๋ฐ ์ค์์ฌํญ
- ํ๊ตญ ๋ง์ฌํ API ์ด์ฉ์ฝ๊ด ์ค์
- ๊ฐ์ธ์ ๋ณด๋ณดํธ๋ฒ ์ค์
- ์์ ํ API ํค ๊ด๋ฆฌ
- ๋ฐ์ดํฐ ์ฌ์ฉ๋ ์ ํ ์ค์
๐ ์ฐธ๊ณ ์๋ฃ
- ํ๊ตญ ๋ง์ฌํ ๊ณต์ ์ฌ์ดํธ
- Model Context Protocol ๋ฌธ์
- MCP TypeScript SDK
- Zod ์คํค๋ง ๊ฒ์ฆ
๐ ๋ผ์ด์ ์ค
MIT License
โ ๏ธ ์ค์: ์ค์ KRA ๊ณต๊ณต API์ ์ฐ๋ํ์ฌ ์๋ํฉ๋๋ค. API ํค ์ค์ ์ด ํ์ํฉ๋๋ค.
๐ก ํ: Context7๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋์ฑ ์ ํํ ๊ฒฝ๋ง ๋ฐ์ดํฐ ๋ถ์์ ๋ฐ์ ์ ์์ต๋๋ค! ํ๋กฌํํธ์ use context7
์ ์ถ๊ฐํด๋ณด์ธ์.