以下の内容はhttps://tech.kickflow.co.jp/entry/2026/03/11/134456より取得しました。


kickflow MCP サーバーのトークン数を97%削減しました。が、しかし…

ティム・バートン風の不気味なクレイメーション(粘土アニメーション)セット。左側では、紫色のタキシードを着た細身の男が、小さなタスクアイコンが描かれた大量のコインと歯車の山を前に圧倒されている。山の中には悲しげな目玉のあるクレイのモンスターが埋もれている。右側では、同じ男が、笑顔の小さな緑色モンスターのために、3つの投入口がある小さなクレイの機械にコインを投入している。機械への投入は矢印で示されている。背景には歪んだゴシック調の部屋、歪んだ空のフレーム、ろうそく、不均整な塔のような建物がある。画像は、大量のデータやタスク(混沌)と、それを整理して効率的に処理するシステム(目的のあるアクション)との対比を描いている。

こんにちは、プロダクト開発本部でエンジニアをしている秋山です。

みなさん、普段から MCP サーバーを活用していますか? 一時期、シェルコマンドのラッパーとして MCP サーバーを使っているケースも見受けられたものの、よりトークン消費数の少ない Agent Skills の台頭により以前よりは下火になった印象ですが、外部サービスとの認証付き連携においては依然として必要な仕組みです。

そして、実は kickflow も MCP サーバを公開しているのを知っていましたか?

github.com

ひっそりと公開されていて知らない人も多そうなので、この記事では kickflow MCP サーバーの宣伝もかねて、公開から今に至るまでの変遷を追いかけていきます。

※アレコレ書いていますが、記事の趣旨は4行くらいにまとまるので、手っ取り早くこの記事の概要を把握したい人はまとめの章までジャンプしてください。


2025年5月:kickflow MCP サーバー爆誕

tech.kickflow.co.jp

kickflow は REST API を公開しています。サービスを利用されている方であれば、誰でも Personal Access Token を使って kickflow を API 経由で操作できます。 ここまで API が公開されているワークフロー製品はまだ少なく、実際にこの機能をフル活用して社内基盤と連携の仕組みを構築しているケースもあります。

REST API は OpenAPI スキーマも提供されているので、これを使って API クライアントを自動生成すれば、kickflow REST API を使ったサービスを開発できます。 この OpenAPI スキーマを元に 2025 年 5 月に弊社 CTO の小林が爆速で MCP サーバを公開したのが前述の記事になります。

これにより REST API の仕様を把握していなくても、AI アシスタントに「自分の未処理タスクを確認して」「申請 #123 を承認して」「利用可能な申請経路を一覧で見せて」「汎用マスタの勘定科目一覧を見せて」のように、自然言語で kickflow のチケットを作成したり、特定条件の依頼を抽出したり、承認や差し戻しの処理を実行することができます。

MCP サーバの技術スタックの詳細は前述の記事で紹介されていますが、ざっくり言うと、

  • MCP TypeScript SDK で MCP サーバを提供
  • Orval が OpenAPI スキーマから APIクライアントを生成
  • 各エンドポイントをラップして Tool 化(LLMでコード生成)

といった構成になっています。

2025年12月上旬:メンテナンス再開

MCPサーバーが公開はされたものの、社内で明確な運用のレギュレーションが決まっていなかったので、公開後しばらく更新がない状態が続いていました。

そんな状況の中、自分が kickflow に 2025年8月に参画します。その後、11月頃になって kickflow MCP サーバーの存在を知るも、公開後に更新されていないことに気づきました。

ちょうど折しも npm の Classic tokens の破棄と Trusted publishing の移行タイミングで、テコ入れのタイミングとしてはちょうど良かったので、合わせて運用のための整備を進めることになりました。

さて、運用のための整備といっても、ベースとしては REST API への追従と依存ライブラリのアップデートがメインになります。やるべきことはさほど多くなく(強いて言えば新しいエンドポイントが増えたとき、ラッパーを追加して新規のToolsを増やしてやるくらい)、日常的な運用に関してはほぼ自動化できそうな感じでした。

2025年12月中旬:おや、Claude Code のようすが…

しかし、整備を進めたこの頃から、どうにも自分の Claude Code の反応が鈍くなってきました。いつも通りに Claude Code に指示を投げかけると、すぐにコンテキストの圧縮が始まってしまいます。

そこで、/context コマンドを叩いてみると、MCP サーバーのコンテキストが大変なことになっていました。

Claude Codeの/context実行結果。MCP toolsが115.6kトークン(全体の57.8%)を占有し、コンテキストの90%が埋まっている非常に重い状態。

何と kickflow MCP サーバーを登録するだけでトークンを 115.6k も消費しているじゃありませんか! これでは kickflow MCP サーバーを登録しただけでユーザーのトークンが大量に消費されてしまい、Claude Codeとやり取りをしたり他の MCP サーバーを使う余地がなくなってしまいます。

社内用の開発ツールであれば、使わないときは、まあ Disabled にしておけばいいか、となりますが、これは kickflow ユーザーの皆様に使って頂くツールです。登録するだけで全体の半分以上のトークンを消費してしまうようなツールを提供しても、誰も使ってくれないのではないか?と危機感を覚えました。

ここからトークン数を減らすための取り組みが始まりました。

2025年12月下旬:1 エンドポイント 1 Tools 構成の限界

kickflow は REST API を提供しており、同時に OpenAPI スキーマも提供されています。

developer.kickflow.com

kickflow MCP サーバーはこの OpenAPI スキーマから Orval を使って zod を出力し、エンドポイントの数の分だけ Tools を登録する作りになっています。

そして、kickflow の REST API はエンドポイントの数はなんと95個もあります。基本的に OpenAPI スキーマ情報はそのまま Tools の詳細に乗るため、チリも積もれば何とやら、それだけでだいぶ消費トークン数を稼いでしまいます。

さらにチケット作成 API などの巨大なオブジェクトをリクエストパラメータとして抱えているエンドポイントなどは、その情報がそのまま消費トークン数に繋がってしまう問題がありました。

MCP Tools · /mcp
└ mcp__kickflow__list_audit_logs: 1.1k tokens
└ mcp__kickflow__create_category: 633 tokens
└ mcp__kickflow__update_category: 843 tokens
└ mcp__kickflow__list_categories: 893 tokens
└ mcp__kickflow__delete_category: 787 tokens
└ mcp__kickflow__list_folders: 892 tokens
└ mcp__kickflow__create_folder: 891 tokens
└ mcp__kickflow__update_folder: 976 tokens
└ mcp__kickflow__get_folder: 822 tokens
└ mcp__kickflow__delete_folder: 818 tokens
└ mcp__kickflow__get_current_user: 621 tokens
└ mcp__kickflow__list_users: 972 tokens
└ mcp__kickflow__create_user: 1.2k tokens
└ mcp__kickflow__get_user: 816 tokens
└ mcp__kickflow__delete_user: 812 tokens
└ mcp__kickflow__update_user: 1.1k tokens
└ mcp__kickflow__lookup_user_by_email: 771 tokens
└ mcp__kickflow__reinvite_user: 824 tokens
└ mcp__kickflow__suspend_user: 832 tokens
└ mcp__kickflow__reactivate_user: 832 tokens
└ mcp__kickflow__list_user_teams: 1.2k tokens
└ mcp__kickflow__list_user_roles: 1.0k tokens
└ mcp__kickflow__list_grades: 872 tokens
└ mcp__kickflow__create_grade: 833 tokens
└ mcp__kickflow__get_grade: 802 tokens
└ mcp__kickflow__update_grade: 1.0k tokens
└ mcp__kickflow__delete_grade: 798 tokens
└ mcp__kickflow__set_default_grade: 840 tokens
└ mcp__kickflow__list_proxy_applicants: 734 tokens
└ mcp__kickflow__create_proxy_applicant: 1.7k tokens
└ mcp__kickflow__delete_proxy_applicant: 825 tokens
└ mcp__kickflow__list_proxy_approvers: 735 tokens
└ mcp__kickflow__create_proxy_approver: 1.7k tokens
└ mcp__kickflow__delete_proxy_approver: 825 tokens
└ mcp__kickflow__list_organization_charts: 884 tokens
└ mcp__kickflow__create_organization_chart: 632 tokens
└ mcp__kickflow__get_organization_chart: 820 tokens
└ mcp__kickflow__update_organization_chart: 845 tokens
└ mcp__kickflow__delete_organization_chart: 816 tokens
└ mcp__kickflow__get_current_organization_chart: 649 tokens
└ mcp__kickflow__activate_organization_chart: 1.1k tokens
└ mcp__kickflow__list_teams: 1.0k tokens
└ mcp__kickflow__create_team: 1.4k tokens
└ mcp__kickflow__get_team: 1.0k tokens
└ mcp__kickflow__update_team: 1.5k tokens
└ mcp__kickflow__delete_team: 1.0k tokens
└ mcp__kickflow__list_team_members: 1.2k tokens
└ mcp__kickflow__create_team_members: 1.6k tokens
└ mcp__kickflow__delete_team_members: 1.3k tokens
└ mcp__kickflow__update_team_member: 1.5k tokens
└ mcp__kickflow__list_general_masters: 896 tokens
└ mcp__kickflow__create_general_master: 1.4k tokens
└ mcp__kickflow__get_general_master: 834 tokens
└ mcp__kickflow__update_general_master: 1.6k tokens
└ mcp__kickflow__delete_general_master: 830 tokens
└ mcp__kickflow__list_general_master_items: 1.2k tokens
└ mcp__kickflow__create_general_master_item: 2.1k tokens
└ mcp__kickflow__get_general_master_item: 1.1k tokens
└ mcp__kickflow__update_general_master_item: 2.3k tokens
└ mcp__kickflow__delete_general_master_item: 1.1k tokens
└ mcp__kickflow__list_routes: 1.1k tokens
└ mcp__kickflow__get_route: 804 tokens
└ mcp__kickflow__list_workflows: 997 tokens
└ mcp__kickflow__get_workflow: 836 tokens
└ mcp__kickflow__list_roles: 892 tokens
└ mcp__kickflow__create_role: 1.4k tokens
└ mcp__kickflow__get_role: 832 tokens
└ mcp__kickflow__update_role: 1.7k tokens
└ mcp__kickflow__delete_role: 828 tokens
└ mcp__kickflow__create_role_members: 1.1k tokens
└ mcp__kickflow__list_role_members: 1.0k tokens
└ mcp__kickflow__delete_role_member: 1.1k tokens
└ mcp__kickflow__list_tickets: 2.4k tokens
└ mcp__kickflow__create_ticket: 8.5k tokens
└ mcp__kickflow__list_tasks: 4.4k tokens
└ mcp__kickflow__get_ticket: 824 tokens
└ mcp__kickflow__update_ticket: 8.5k tokens
└ mcp__kickflow__approve_ticket: 868 tokens
└ mcp__kickflow__reject_ticket: 963 tokens
└ mcp__kickflow__deny_ticket: 824 tokens
└ mcp__kickflow__withdraw_ticket: 834 tokens
└ mcp__kickflow__archive_ticket: 850 tokens
└ mcp__kickflow__list_ticket_links: 999 tokens
└ mcp__kickflow__list_viewers: 1.1k tokens
└ mcp__kickflow__create_viewer: 2.0k tokens
└ mcp__kickflow__delete_viewer: 1.0k tokens
└ mcp__kickflow__list_comments: 1.1k tokens
└ mcp__kickflow__create_comment: 959 tokens
└ mcp__kickflow__get_comment: 1.0k tokens
└ mcp__kickflow__update_comment: 1.1k tokens
└ mcp__kickflow__delete_comment: 1.0k tokens
└ mcp__kickflow__upload_file: 1.2k tokens
└ mcp__kickflow__get_file: 720 tokens
└ mcp__ide__getDiagnostics: 611 tokens
└ mcp__ide__executeCode: 682 tokens

kickflow MCP サーバーの Tools 一覧。エンドポイントの数だけ Tools が存在しています。 Ticket 関連のエンドポイントは入力パラメータが多いので特にトークン数が多いこともあり、合計で 115.6k ものトークンを消費していました。

ちなみに、Orval には OpenAPI スキーマから直接 MCP サーバを作る機能があります。 エンドポイントのラッパーを作る必要もなく、OpenAPI スキーマを取り込むだけで MCP サーバーができるので、運用の手間も大幅に減ります。 しかし、OpenAPI スキーマの情報がそのまま Tools の情報として乗る作りのため、こちらも同じ問題を抱えています。

Orvalの標準機能を利用したMCPサーバーの/context結果。MCP toolsは94.5kトークン(47.3%)へ微減したが、依然としてコンテキスト全体の81%を消費している。

Orval の標準機能の MCP サーバーを使うことで自前で Tools のラッパーを作った場合よりもトークン数の消費は押さえられたものの、やはりエンドポイントの数が多いとトークン数の消費は大きくなってしまいます。

2026年1月上旬:MCP サーバー Tools の構成を見直す

そこで、エンドポイントの数が多い MCP サーバーを作るとトークン数の消費が大きくなってしまう問題の根本的な解決は、現状のようにエンドポイントごとに Tools を作るのではなく、Tools の数自体を減らすことで解決できるのではないか?と考えました。

そこで以下のように、Tools をどのエンドポイントでも汎用的に使える以下の3層に作り直しました。

discover_apis: 利用可能な Kickflow API の一覧を表示します。get_api_infocall_api Tools で使用する operationId を確認できます。

get_api_info: 指定したoperationId のAPI情報(pathParamsqueryParamsrequestBody)を JSON Schema で取得します。call_api を呼ぶ前に必要なパラメータを確認できます。

call_api: Kickflow APIを実行します。operationIdpathParamsqueryParamsrequestBody をそれぞれ個別に指定してAPIを呼び出します。

kickflow MCP サーバーにプロンプトで指示を出すと、

  1. discover_apis で利用するエンドポイントのキーを特定する
  2. discover_apis で取得したキーを使い get_api_info でエンドポイントのリクエストに必要なパラメータと返却内容の詳細情報を取得する
  3. get_api_info で取得した情報を元に call_api で 実行する

の順番で Tools を呼び出すようになります。

これなら必要になったタイミングで最小限の詳細情報を取得するので、Tools の数も最小限に押さえられ、MCP サーバー登録時のトークン数を限りなく小さくできます。

また、今まではエンドポイントと Tools が一対一だったため、新規追加があると Tools も増やす必要もありましたが、この3つの Tools は OpenAPI スキーマから Orval で自動生成されたデータを参照するだけの構成になっており、エンドポイントの修正や追加があっても Tools の追加やコードの修正は不要になります。 ユーザーと開発の双方にとっていいことづくめです。

この構成で Tools を作り直した結果、

改善後のMCPサーバーの/context結果。MCP toolsが2.7kトークン(1.4%)まで激減し、空き容量(Free space)が134k(66.9%)まで改善された状態。

115.6k もあったトークン数が、3つの Tools にまとめることで、合計 2.7k まで削減することができました。なんと 97% の削減です!

MCP Tools · /mcp
└ mcp__kickflow__discover_apis: 718 tokens
└ mcp__kickflow__get_api_info: 829 tokens
└ mcp__kickflow__call_api: 1.2k tokens

Tools の一覧もスッキリ。

2026年1月中旬:kickflow MCP v1.0.0 リリース!!

圧倒的なトークン数の削減を達成したこの改善を、2026年1月20日に v1.0.0 でリリースしました!

…さて、ここで既にお気づきの人もいると思いますが、実は Claude Code は 2026年1月16日にリリースされた v2.1.7 から Tool search tool という機能が追加されました。

platform.claude.com

この機能はツールを動的に検出し、オンデマンドで読み込むことができる機能です。これにより、重量級の MCP サーバーであっても、必要なときに必要な情報だけを読み込むことができるようになり、登録しただけで過剰なトークン数を消費してしまう問題は解決されたのです。

何とも間の悪いリリースになってしまいましたが、Claude Code の機能に依存せず、MCP サーバーのトークン数を省力化をすることは、他の MCP クライアントや、将来的に Claude Code 以外の LLM を使う場合なども考えると、十分に価値はありますし、開発側の運用もシンプルになる、という利点もあります。

この記事を書くのが遅くなってしまったため、話題としてはだいぶ機を逸した感じになってしまいました。1〜2ヶ月で状況が変わってしまうのも AI あるあるですね…

せっかく取り組んだ改善活動をこのままお蔵入りさせるのはもったいないですし、お焚きあげとkickflow MCP サーバーの宣伝を兼ねてこの記事も公開しておきます。

まとめ

  • kickflow は MCP サーバーを提供しているが、トークン数の消費が激しかった。
  • 2026年1月20日のリリースで MCP サーバーの使用トークン数を 115.6k から 2.7kに(97%)削減した。
  • しかし 2026年1月16日の Claude Code リリースで Tool search tool の機能により、MCP サーバーのオンデマンド読み込みに対応していたのでこの問題は修正をしなくても解決していた。

結果として「徒労」だったのか?

いえ、そんなことはありません。たとえクライアント側(Claude Code)が賢くなったとしても、サーバー側で提供するツールが整理されていることは、LLM の推論コストを下げ、実行精度(Tool Useの成功率)を上げることにつながります。何より、OpenAPI スキーマの変更に強いメンテナンス性の高い構成に進化できたことは、今後の運用において大きな財産になりました。

kickflow MCP サーバーをよろしくお願いします!

github.com

kickflow MCP サーバーを使うと簡単に kickflow の REST API を自然言語で実行できるようになり便利なので、ぜひ kickflow ユーザーの皆様には活用していただけると大変嬉しく思います。今後も運用改善を継続していきますので、なにとぞよろしくお願いします!

We are hiring!

kickflow(キックフロー)は、運用・メンテナンスの課題を解決する「圧倒的に使いやすい」クラウドワークフローです。

kickflow.com

サービスを開発・運用する仲間を募集しています。株式会社kickflowはソフトウェアエンジニアリングの力で社会の課題をどんどん解決していく会社です。こうした仕事に楽しさとやりがいを感じるという方は、カジュアル面談・ご応募お待ちしています!

careers.kickflow.co.jp




以上の内容はhttps://tech.kickflow.co.jp/entry/2026/03/11/134456より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14