
多くのチームは Model Context Protocol を「AI エージェントに tool をつなぐ標準」として理解します。それ自体は間違っていませんが、設計判断にはまだ粗い表現です。
より実務的な見方は次の通りです。
公式仕様では、MCP は JSON-RPC ベースで tools、resources、prompts を agent runtime に公開するためのプロトコルです。Model Context Protocol specification、lifecycle、そして Anthropic の announcement を読むと位置づけがつかみやすくなります。
一方で、MCP だけでは解決しません。
だからこそ、成熟したチームは MCP を「delivery protocol」として扱い、アーキテクチャ全体の代替品にはしません。
MCP が新しいからという理由だけで、すべての capability を MCP に押し込むのはよくある失敗です。実際には、役割に応じて surface を選び分けた方がうまくいきます。
| Surface | 強み | 弱み | 向いているケース |
|---|---|---|---|
| MCP server | discovery、agent-native execution、host interoperability | stable payload と policy は自分で設計する必要がある | caller が agent host であり、tools/resources semantics を活かせるとき |
| REST API | deterministic contract、成熟した auth / cache / gateway | agent 側が endpoint semantics を理解する必要がある | agent・app・internal service で長期に再利用する contract が必要なとき |
| Skills | workflow instructions と guardrails の配布 | live data plane には弱い | 手順や運用知識を配り、runtime data は MCP / API に任せたいとき |
実務では次のルールが役立ちます。
つまり、本番では MCP、REST、Skills を併用するのが自然です。
puppyoneで統制されたMCP配布を見るGet started弱い MCP tool は「何でもできる大きな関数」になりがちです。強い MCP tool は、責務が狭く、入力が厳密で、出力が安定しています。
そのための基本は次の通りです。
import { McpServer } from "@modelcontextprotocol/sdk/server";
const server = new McpServer({ name: "org-context" });
server.tool(
"get_knowhow_item",
{
description: "Read one governed Know-How item by id",
inputSchema: {
type: "object",
properties: { id: { type: "string" } },
required: ["id"],
additionalProperties: false
}
},
async ({ id }, ctx) => {
const item = await ctx.store.read(id);
if (!ctx.policy.canRead(ctx.user, item.policyTag)) {
return {
ok: false,
error: { code: "forbidden", message: "Access not permitted" }
};
}
return {
ok: true,
data: {
id: item.id,
title: item.title,
version: item.version,
summary: ctx.redactor(item.summary)
},
trace: {
requestId: ctx.requestId,
policyTag: item.policyTag
}
};
}
);
本番価値は派手さではなく、「内部システムの広い権限をそのまま露出しない」点にあります。
MCP の紹介記事の多くは「server が起動した」で終わります。しかし、その server が sensitive context を読み、internal tools を呼び、場合によっては write action を起こすなら、それでは不十分です。
最低限の hardening は次のようなものです。
Docker docs の HEALTHCHECK、Compose healthchecks、rootless tips、bind mounts はそのまま実装に役立ちます。
FROM node:22-slim AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci --ignore-scripts
COPY . .
RUN npm run build && npm prune --omit=dev
FROM gcr.io/distroless/nodejs22-debian12:nonroot
WORKDIR /app
COPY --from=build /app/dist ./dist
USER 65532:65532
ENV NODE_ENV=production
CMD ["/nodejs/bin/node", "dist/server.js"]
ローカル実行でもオンプレでも、runtime boundary が明確でなければ trustworthy にはなりません。
MCP は agent-native execution に強い一方、REST API には依然として明確な価値があります。
そのため、多くのチームは同じ governed context を MCP と REST の両方で公開します。Azure Architecture Center の API design guidance は今でも有効ですし、RFC 6585 と RFC 9110 は throttling の実装に役立ちます。
重要なのは duplication ではなく役割分担です。
両方必要なら、それは自然な構成です。
Skills の強みは、手順や guardrails を共有できることです。つまり次のような用途に向いています。
しかし Skills 単体では freshness、authorization、structured retrieval を担えません。Anthropic の skills docs や anthropics/skills repository は、フォーマットの参考として十分です。
実務上は次の分担が扱いやすいです。
これで instruction と data delivery を分離できます。
agent が tool を誤用したとき、少なくとも次は答えられなければいけません。
そのため OpenTelemetry と structured logs は optional ではありません。context propagation と traces の docs はよい出発点です。さらに、NIST SP 800-92 draft revision と SP 800-53 Rev.5 は retention と audit planning の整理に使えます。
{
"ts": "2026-04-03T09:15:00Z",
"event": "tool.execute",
"requestId": "req_7ad2",
"tool": "get_knowhow_item",
"actor": "agent_ops_reader",
"decision": "allow",
"resultHash": "sha256:ab12...",
"latencyMs": 42
}
この程度の再構成性が出せないなら、いま一番重要なのは protocol choice ではありません。
多くの MCP プロジェクトが失敗する理由は protocol の不理解ではなく、protocol の背後にある context が散らかっていることです。
ここで puppyone のような governed context base が意味を持ちます。enterprise Know-How を構造化し、hybrid indexing を付け、同じ governed knowledge を MCP、API、workflow packaging に配布できるからです。すると MCP server は毎回 ad hoc に context を組み立てる必要がなくなり、curated artifact を返せるようになります。
特に次の条件で効果が出ます。
関連する読み物:
初期段階なら、大規模な protocol migration から始めない方が安全です。まず 1 つの read-heavy workflow を選び、次を徹底します。
基礎が安定してから tools、Skills、orchestration を広げた方が、あとで崩れません。
puppyoneで統制MCP導入を設計するGet started置き換えません。MCP は agent-facing execution に強い一方、REST は host-agnostic な安定契約や gateway control、service reuse に向いています。
いいえ。広すぎる tool は govern しにくく、debug もしづらいです。まずは狭く、型があり、出力が予測可能な capability から始めるべきです。
通常は十分ではありません。Skills は workflow intent を配布するのに向いていますが、freshness、authorization、auditability が重要なら、runtime data は MCP tool か API に依存する必要があります。