🌐

GROWI の MCPサーバーをバイブコーディングしてみた

に公開

GROWI の MCPサーバーを作ってみた

今更ながら、MCPのキャッチアップを兼ねて、Cursorで使用できるGROWIのMCPサーバーを作成してみました。

⚠️公式製でもなんでもないので、あくまで個人利用等に限っての利用をお勧めします。
もっとシンプルに実装できそうではあるので今後改善の余地があります。

https://github.com/smtrdev/growi-mcp-server
https://www.npmjs.com/package/growi-mcp-server

GROWI:
https://growi.org/ja/

既存の mcp サーバーと、GROWIのAPIドキュメントを参考に、基本的には Cursor へのプロンプトで作成しました。

ちなみにこの記事もほぼCursorで書いてみました。

背景

  • 単純に mcp をキャッチアップしてみたかった
  • Growi を活用していて、新たなユースケースを発掘してみたかった
  • 周りにも mcp サーバーを作ってる方がいて刺激を受けた

実装のポイント

  1. Node.jsベースのMCPサーバー

    • TypeScriptで記述
    • MCP SDKを使用
  2. 直接HTTPリクエスト

    • GROWIのAPIに直接アクセス

はまりどころ

基本的には Cursor x Claude でのバイブコーディングで作成しました。
内部では mcp の TypeScript SDKを活用しているので、基本的にはお作法にならってサーバーを実装する形になります。

https://github.com/modelcontextprotocol/typescript-sdk

問題1: JSONパースエラー

当初、ログメッセージに絵文字が含まれていたため、Cursorがレスポンスをパースできないという問題がありました。

Client error for command Unexpected token '✅', "✅ Tool exe"... is not valid JSON

解決策: ログから絵文字を削除し、標準出力に何も書き込まないようにしました。

問題2: アクセストークン周りの処理

MCP サーバー自体の実装よりはここで処理でだいぶ時間を溶かしました。
(細かい実装まで自分でいちいち確認しておけばもっと時間短縮できたかも・・・Claudeを信じすぎたのが良くない)

ヘッダーの 'Content-Type': 指定ミスで、永遠にヘッダー経由のアクセストークンが受け付けてもらえず、 一旦は access_token をクエリパラメータで食わせる形で実装していました。

こちらは解消したので、今はヘッダーで処理しています。
mcp というよりはAPIへの接続の問題でした。

解決策: ヘッダーでの処理を実装。

問題3: 想定より時間かかった

問題2に関連してますが、1-2時間で終わるかと思いつつ、結局5時間ほどかかってしまいました。
mcpサーバー作成の勘所はわかったので、他のtoolや他のサービスについてはもっとスムーズに実装できると思います。

解決策: 1つのtoolに絞り実装

問題4: asdf で node を入れていたことで mcp が起動できない

地味にはまりました。

解決策: command に /your/path/.asdf/installs/nodejs/18.20.8/bin/node のような指定をすることで解消

使用方法

mcp.json に growi を追加

{
  "mcpServers": {
    "growi": {
      "command": "node",
      "args": ["/path/to/your/growi-mcp-server/dist/index.js"],
      "env": {
        "GROWI_API_URL": "{YOUR URL}",
        "GROWI_API_TOKEN": "{YOUR TOKEN}"
      }
    }
  }
}

GROWIのページ一覧を取得するには、Cursorで以下のように呼び出します:

mcp で Growi の / から記事を15件取ってきて

(それ以外の機能も順次追加していこうと思います)

今後の改善点

  1. 認証方法の改善 (Authorization headerの使用) 解消
  2. ページ内容の取得APIの追加
  3. 検索機能の実装

まとめ

MCPプロトコルを活用することで、CursorとGROWIを連携させることができました。
もっとtoolsを拡張していけたらと思います。

人生初 npm publish もできたので、久しぶりにエンジニアっぽいことができてよかったです。
mcp サーバー作者の方がおっしゃっていた気持ちがわかりました。

GAOGAO Engineer Blog

Discussion