mcpサーバー自作入門
tags: ai claude typescript
claude codeがリリースされて1周年ということでいい加減周辺技術を学び始めるかと思い、第一弾としてmcpが出てきた時に流行ってたmcpで足し算をするというの探してやってみたらコードが非推奨になってたりしたので、typescirptの2026/02/21最新バージョンでやってみる
Claude Code is turning one, and we’re throwing a birthday party.
— Claude (@claudeai) February 17, 2026
Join fellow builders and the Claude Code team in San Francisco on Feb 21 for live demos, top hackathon projects, and cake.
Come show us what you're building (spots are limited): https://t.co/Pgz9OGFm3j pic.twitter.com/4UCGSRfXH2
mcpの方式
mcpの通信方式は主に以下のものらしい
- ローカルでサーバーを動かす方式
- stdioを利用
- リモートでサーバーを動かす方式
- ちょっと前は http/server sent eventでやってたらしい
- 今はstreamable httpを利用
今回はstdioを利用する
足し算をするmcp
mcpのsdkはtypescript, python, go, rustなど色々なsdkが用意されているが SDKs を見るに modelcontextprotocol/typescript-sdk だけがTier 1だということを調べてて知った。そういう理由もありtypescriptで作っていく
作り方としては Build an MCP server を参考にした。stdioで作る注意点としてログは console.log では無く console.error かloggingライブラリでファイルに書き込むのが良いらしい。
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
import * as z from 'zod'
const server = new McpServer({
name: 'server-time',
version: '0.0.1',
})
server.registerTool(
'get-calc-add',
{
title: 'additional calulation',
description: '足し算を行う',
inputSchema: z.object({
left: z.number(),
right: z.number(),
}),
},
async ({ left, right }) => {
return {
content: [
{
type: 'text',
text: `足し算の結果は ${left} + ${right} = ${left + right} でした`,
},
],
}
},
)
async function main() {
const transport = new StdioServerTransport()
await server.connect(transport)
console.error('server is running...')
}
main().catch((e) => {
console.error(e)
process.exit(1)
})
claude codeへの設定
claude codeへのmcpの設定。pnpmを利用しているのでpnpxでtsx経由でmcp serverを実行する設定をする
claude mcp add --transport stdio server-time -- pnpx tsx <project root full path>/src/index.ts
プロンプトからmcpが使われるために重要なのは上記のコードで言うと”description”の description: '足し算を行う' と書かれている部分で、descriptionの内容でaiが自動的に選択してmcpを実行してくれる
今回はデバッグ的にあえて明確「mcpで1 + 2を計算して」というとmcp経由で実行され「足し算の結果は 1 + 2 = 3 でした」と出力された。
まとめ
思ったより簡単にmcpを実現できたので、もうちょっとまともなmcp作ってみたくなった1。
slash-commandは業務で使ったことあるので、次はhooksだったりskillsだったりエージェントチームあたりかな
Footnotes
-
題材全く思いつかないけど ↩