はじめに: 開発者の生産性を高めるための MCP サーバー
カテゴリ内 生産性 プロジェクトの テックMCP、 すべての開発者が行う反復タスクを自動化するように設計された 3 つの MCP サーバーが見つかりました。 コードレビュー、依存関係管理、 新しいプロジェクトの作成。これらのサーバーは次のように動作します。 機能も、 内部状態やデータベースが不要なため、軽量で予測可能で、簡単に統合できます。 あらゆるワークフロー。
彼らが解決する問題は具体的です。手動によるコードレビューは時間がかかり、主観的です。 依存関係の脆弱性は気づかれないことが多く、初期設定が 新しいプロジェクトを始めるには、間違いを避けるために時間と注意が必要です。自動化することで、 これらのサーバーにより、開発者は機械的な制御に集中できます。 ビジネス ロジックとアーキテクチャの選択。
3 つの生産性サーバー
- コードレビュー: console.log、デバッガー、ハードコードされた資格情報、および循環的複雑性の検出による静的コード分析
- 依存関係マネージャー: 脆弱性スキャン、ライセンス監査、未使用の依存関係の検出
- プロジェクトの足場: 事前定義されたテンプレート (Node.js、Express、React、MCP) からのプロジェクトとコンポーネントの生成
サーバー 1: コードレビュー
サーバー コードレビュー プロセス指向の静的解析ツールを提供します
コードレビュー。人間の監査人が行う機械的なチェックを自動化します。
省略するもの: 忘れられたデバッグ ステートメント、ハードコードされた資格情報、過度に複雑な関数
そして問題のあるパターン。検出された各問題は重大度レベルで分類されます
(error, warning o info)、優先順位を付けることができます
修正。
ステートレスなアーキテクチャ
サーバーにはストアや内部サービスはありません。各ツールは 1 つとして動作します 純粋関数 これは入力を受け取り、JSON 結果を生成します。ありません データベースにはキャッシュがなく、呼び出し間で共有される状態もありません。このアーキテクチャ上の選択 冪等性を保証します。同じリクエストは常に同じ結果を生成します。
Richiesta MCP
|
v
+---------------------+
| Tool Dispatcher |
+---------------------+
/ | \
v v v
analyze- check- suggest-
diff complexity improvements
| | |
v v v
parseDiff calculate checkMagicNumbers
detectIss Complexity checkLongFunctions
ues checkDeepNesting
checkDuplicatePatterns
checkUnusedVariables
ツールテーブル
| ツール | 説明 | パラメータ |
|---|---|---|
analyze-diff |
git diff 文字列を分析して、追加したコード内の一般的な問題を見つける | diff (文字列) - 解析する git diff 文字列 |
check-complexity |
決定点を数えて循環的複雑さを計算する | code (文字列) - コード スニペット。 language (文字列) - 言語 |
suggest-improvements |
マジックナンバー、長い関数、深いネストの改善を提案 | code (文字列) - コード スニペット。 language (文字列) - 言語 |
ツール: 分析差分
ツール analyze-diff 形式で文字列を受け取ります git diff そしてそれを分析する
問題のあるパターンを一行ずつ探します。内部フローは次の手順に従います。
- diff 文字列は複数の行に分割されます
- 変更されたファイル名はヘッダーから抽出されます
+++ - ハンクヘッダーは行番号を追跡するために解析されます
- 追加された各行 (
+) 問題のパターンに対してテストされます - 追加された 50 行を超える連続ブロックがチェックされます
analyze-diff で検出されるパターン
- コンソールステートメント (警告):
console.log,console.debug,console.info,console.warn,console.error,console.trace,console.dir - todoコメント (情報): を含むコメント
TODO,FIXME,HACK,XXX,TEMP - デバッガーステートメント (エラー): 指示
debuggerコードに残った - 警告ステートメント (警告): 電話してください
alert() - ハードコードされた認証情報 (エラー): パスワード、シークレット、api_key、ソースにハードコードされたトークン
- 空獲り (警告): エラーを隠す空の catch ブロック
- 大きな加算 (情報): 50 行を超える連続ブロックが追加されました
問題を含む差分を解析するためのリクエストとレスポンスの例:
// Richiesta
{
"tool": "analyze-diff",
"arguments": {
"diff": "--- a/src/app.ts\n+++ b/src/app.ts\n@@ -10,3 +10,5 @@\n+console.log('debug');\n+const password = 'secret123';\n+debugger;"
}
}
// Risposta
{
"stats": { "filesChanged": 1, "linesAdded": 3, "linesRemoved": 0 },
"totalIssues": 3,
"issuesBySeverity": { "error": 2, "warning": 1, "info": 0 },
"issues": [
{ "type": "console-statement", "severity": "warning", "line": 10 },
{ "type": "hardcoded-credential", "severity": "error", "line": 11 },
{ "type": "debugger-statement", "severity": "error", "line": 12 }
]
}
ツール: 複雑性のチェック
ツール check-complexity を計算します 循環的複雑さ 1 つの
意思決定ポイントをカウントするコード スニペット。複雑さは 1 から始まります (パス
main) と、見つかった分岐構造ごとに増分します。
誤検知を避けるために、コードから最初にコメントと文字列が削除され、その後、はい
標準的な意思決定パターンは次のとおりです。 if, else if, for,
while, case, catch, &&,
||, ?:.
多言語サポート
このツールは言語固有のパターンを認識し、基本的な分析を拡張します。
| 言語 | 追加のパターン |
|---|---|
| パイソン | elif, except, and, or |
| さび | match, => |
| ジャワ | 標準パターン(if、for、while、switch/case) |
| TypeScript | 標準パターン + 三項演算子および論理演算子 |
計算された複雑さは、次の 4 つのレベルに自動的に分類されます。
- <= 5: 低 - シンプルで読みやすいコード
- <= 10: 中程度 - 管理可能な複雑さ
- <= 20: 高 - リファクタリングの候補
- > 20: 非常に高い - 緊急の分解が必要
// Richiesta
{
"tool": "check-complexity",
"arguments": {
"code": "function process(data) {\n if (data.valid) {\n for (const item of data.items) {\n if (item.active && item.count > 0) {\n switch(item.type) {\n case 'A': break;\n case 'B': break;\n }\n }\n }\n }\n}",
"language": "javascript"
}
}
// Risposta
{
"totalComplexity": 7,
"rating": "moderate - manageable complexity",
"breakdown": [
{ "pattern": "if", "count": 2, "description": "If statements" },
{ "pattern": "for", "count": 1, "description": "For loops" },
{ "pattern": "case", "count": 2, "description": "Switch case branches" },
{ "pattern": "&&", "count": 1, "description": "Logical AND operators" }
],
"lineCount": 12,
"language": "javascript"
}
ツール: 改善の提案
ツール suggest-improvements ソースコードに対して 5 つの独立したチェックを実行します。
潜在的な品質と保守性の問題を示すパターンを探します。
- マジックナンバー:定数として宣言されていない2桁以上の数値(0、1、2、10、100、1000、24、60、1024などの一般的な値を除く)
- 長い関数: 30 行を超える関数、中括弧の数で検出
- 深い入れ子: 4 レベルを超える中括弧のネスト (5 行ごとに重複排除)
- 重複したコード:同一行(10文字以上)が3回以上出現
- 未使用の変数: 変数は宣言されていますが、コード内で 1 回だけ参照されています
提案は重大度によって並べ替えられます。 high > medium > low.
// Richiesta
{
"tool": "suggest-improvements",
"arguments": {
"code": "function calc(x) {\n const result = x * 3.14159;\n const temp = 42;\n return result * 86400;\n}",
"language": "typescript"
}
}
// Risposta
{
"totalSuggestions": 2,
"suggestionsBySeverity": { "high": 0, "medium": 2, "low": 0 },
"suggestions": [
{ "type": "magic-number", "severity": "medium", "message": "Magic number 3.14159 found" },
{ "type": "magic-number", "severity": "medium", "message": "Magic number 86400 found" }
]
}
サーバーへのツールの登録
サーバーツール code-review 標準の Tech-MCP パターンに従って記録されます。
各ツールは、Zod を使用して入力スキーマを宣言し、返されるハンドラーを実装します。
JSON テキスト コンテンツとしての結果:
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [
{
name: 'analyze-diff',
description: 'Analyze a git diff string for common issues in added code',
inputSchema: {
type: 'object',
properties: {
diff: { type: 'string', description: 'The git diff string to analyze' }
},
required: ['diff']
}
},
{
name: 'check-complexity',
description: 'Calculate cyclomatic complexity of a code snippet',
inputSchema: {
type: 'object',
properties: {
code: { type: 'string', description: 'The code snippet' },
language: { type: 'string', description: 'Programming language' }
},
required: ['code', 'language']
}
},
{
name: 'suggest-improvements',
description: 'Suggest improvements for magic numbers, long functions, deep nesting',
inputSchema: {
type: 'object',
properties: {
code: { type: 'string', description: 'The code snippet' },
language: { type: 'string', description: 'Programming language' }
},
required: ['code', 'language']
}
}
]
}));
コードレビューによって公開されたイベント
サーバーは、Tech-MCP スイートの他のサーバーによって利用可能な 2 つのイベントを EventBus 上に発行します。
| イベント | 発行者 | ペイロード |
|---|---|---|
code:commit-analyzed |
analyze-diff |
{ commitHash, files, stats: { filesChanged, linesAdded, linesRemoved } } |
code:review-completed |
suggest-improvements |
{ files, issues, suggestions } |
サーバーはイベントをサブスクライブしません。純粋にツール呼び出しに反応します。サーバー
standup-notes e agile-metrics これらのイベントを消費できます
コード品質メトリクスを集計し、自動レポートを生成します。
サーバー 2: 依存関係マネージャー
サーバー 依存関係マネージャー 依存関係の管理と分析に特化しています Node.js プロジェクトの。これは、現代のソフトウェア開発における 3 つの重大な問題に対処します。 依存関係におけるセキュリティの脆弱性、宣言されているがインポートされていないパッケージ、および コピーレフト ライセンスに互換性がないため、ソフトウェアの配布に制限が課される可能性があります。
システムアーキテクチャと依存関係
とは異なり code-review これは完全にサーバーの正規表現を介して動作します。
dependency-manager ファイルシステムおよび子プロセスと対話します。それは残っています
ただしステートレス: データはなく、呼び出し間で保持されます。
projectPath
|
+-- package.json <--- letto da tutti e 3 i tool
|
+-- node_modules/ <--- letto da license-audit
| +-- pkg-a/
| | +-- package.json (campo "license")
| +-- pkg-b/
| +-- package.json
|
+-- src/ <--- scansionato da find-unused
+-- index.ts
+-- app.ts
+-- utils/
ツールテーブル
| ツール | 説明 | パラメータ |
|---|---|---|
check-vulnerabilities |
実行します npm audit --json 脆弱性を重大度ごとにグループ化します |
projectPath (文字列) - プロジェクト ディレクトリへの絶対パス |
find-unused |
ソースファイル内のインポートを分析して未使用の依存関係を見つける | projectPath (文字列) - プロジェクト ディレクトリへの絶対パス |
license-audit |
各依存関係のライセンスを読み取ります。 node_modules コピーレフトを報告してください |
projectPath (文字列) - プロジェクト ディレクトリへの絶対パス |
ツール: 脆弱性のチェック
ツール check-vulnerabilities そして構造化されたラッパー npm audit --json。
操作フローには次のものが含まれます。
- の存在を確認する
package.json示されたパスで - の実行
npm audit --json60秒のタイムアウトあり - ゼロ以外の終了コードの処理 (脆弱性が見つかった場合、npm Audit はエラーで終了します)
- npm v7+ 形式での JSON 出力の解析
- 重大度によるグループ化:
critical,high,moderate,low,info - イベント掲載
code:dependency-alert重大な脆弱性または高度な脆弱性ごとに
// Richiesta
{
"tool": "check-vulnerabilities",
"arguments": {
"projectPath": "/home/user/my-project"
}
}
// Risposta
{
"project": "my-project",
"totalVulnerabilities": 5,
"severityCounts": {
"high": 2,
"moderate": 2,
"low": 1
},
"vulnerabilities": {
"high": [
{
"name": "lodash",
"severity": "high",
"title": "Prototype Pollution",
"url": "https://github.com/advisories/GHSA-xxxx",
"range": "<4.17.21",
"fixAvailable": { "name": "lodash", "version": "4.17.21" }
}
]
},
"metadata": {
"totalDependencies": 142,
"devDependencies": 38,
"prodDependencies": 104
}
}
ツール: 未使用の検索
ツール find-unused ソース ファイルの再帰的スキャンを実行します。
で宣言された依存関係を特定する package.json しかし実際に輸入したことはない
コードの中で。分析の内容は次のとおりです。
- ESモジュールをインポートする:
import ... from 'package' - CommonJS:
require('package') - 動的インポート:
import('package') - スコープ付きパッケージ: の正しい管理
@scope/package
ディレクトリ node_modules, dist, build, .git
e coverage は自動的にスキャンから除外されます。分析されたファイル
拡張子を含める .ts, .js, .tsx e .jsx.
// Richiesta
{
"tool": "find-unused",
"arguments": {
"projectPath": "/home/user/my-project"
}
}
// Risposta
{
"project": "my-project",
"sourceFilesScanned": 47,
"summary": {
"totalDependencies": 12,
"totalDevDependencies": 8,
"unusedDependencies": 2,
"unusedDevDependencies": 1
},
"unusedDependencies": ["moment", "lodash"],
"unusedDevDependencies": ["@types/lodash"],
"note": "Dependencies may be used in config files, scripts, or other non-source files."
}
ツール: ライセンス監査
ツール license-audit 直接読んで各依存関係のライセンスを調べる
ファイル package.json 内で node_modules。コントロール
特に、コピーレフト ライセンスが使用される商用プロジェクトに関連します。
望ましくない制限を課す可能性があります。
コピーレフトライセンスが検出されました
- LPG: バージョン 2.0、3.0、 - のみ、 - 以降
- AGPL:バージョン1.0、3.0
- LGPL:バージョン2.0、2.1、3.0
- 他の: MPL-2.0、EUPL、CPAL-1.0、OSL-3.0、CC-BY-SA-4.0
// Richiesta
{
"tool": "license-audit",
"arguments": {
"projectPath": "/home/user/my-project"
}
}
// Risposta
{
"project": "my-project",
"summary": {
"totalDependenciesChecked": 20,
"uniqueLicenses": 4,
"copyleftCount": 1,
"notFoundInNodeModules": 0
},
"copyleftWarnings": [
{ "name": "some-gpl-lib", "version": "2.1.0", "license": "GPL-3.0" }
],
"byLicense": {
"MIT": [{ "name": "express", "version": "4.21.0" }],
"ISC": [{ "name": "glob", "version": "10.3.0" }],
"GPL-3.0": [{ "name": "some-gpl-lib", "version": "2.1.0" }]
}
}
dependency-manager によって発行されたイベント
| イベント | 発行者 | ペイロード | 状態 |
|---|---|---|---|
code:dependency-alert |
check-vulnerabilities |
{ package, severity, advisory } |
重大度のある脆弱性ごとに critical o high |
として code-review、このサーバーもイベントをサブスクライブしません。サーバー
standup-notes e agile-metrics のアラートを受信できます
長期にわたる脆弱性の傾向を追跡します。
サーバー 3: プロジェクトの足場
サーバー プロジェクトの足場 新しいプロジェクトの作成を自動化します。
事前定義されたテンプレートから始まるコンポーネント。通常、新しいプロジェクトにはそれぞれ次のものが必要です。
マニュアル作成 package.json, tsconfig.json、の構造
定型的なフォルダーとファイル: このサーバーが実行する反復的でエラーが発生しやすいプロセス
完全に排除します。
利用可能なテンプレート
このサーバーは、開発における最も一般的なユースケースをカバーする 4 つの組み込みテンプレートを提供します。 最新の TypeScript:
| テンプレート | 説明 | 生成されたファイル |
|---|---|---|
node-typescript |
Node.js と TypeScript、ESM、Vitest | package.json、tsconfig.json、src/index.ts、.gitignore、README.md |
express-api |
TypeScript、ルーティング、ミドルウェアを使用した Express REST API | package.json、tsconfig.json、src/index.ts、src/app.ts、src/routes/health.ts、src/middleware/error-handler.ts、.gitignore、README.md |
react-app |
TypeScript と Vine を使用した React アプリケーション | package.json、tsconfig.json、vite.config.ts、index.html、src/main.tsx、src/App.tsx、src/App.css、.gitignore、README.md |
mcp-server |
TypeScript を使用したサーバー モデル コンテキスト プロトコル | package.json、tsconfig.json、src/index.ts、src/tools.ts、.gitignore、README.md |
ツールテーブル
| ツール | 説明 | パラメータ |
|---|---|---|
list-templates |
使用可能なすべてのテンプレートを名前、説明、ファイル構造とともにリストします。 | 誰でもない |
scaffold-project |
プレースホルダーを置換してテンプレートからプロジェクト全体を生成する | template (弦)、 projectName (弦)、 outputDir (弦)、 options? (オブジェクト: 著者、説明、ライセンス) |
scaffold-component |
単一のコンポーネント/サービス/コントローラー/モデル ファイルを生成します | type (列挙: コンポーネント、サービス、コントローラー、モデル)、 name (弦)、 outputDir (弦)、 language (列挙型: typescript、javascript) |
ツール: scaffold-project
ツール scaffold-project テンプレートから開始してプロジェクト全体を生成します
選択されました。メカニズムの中心となるのは、 プレースホルダーの置き換え:
各テンプレート ファイルには次のようなプレースホルダーが含まれています {{projectName}},
{{author}}, {{description}}
e {{license}} これらは、提供された値に置き換えられます。
1. Validazione template
|
v
2. Preparazione valori placeholder
{ projectName, author, description, license }
|
v
3. Per ogni file nel template:
a. Calcolo percorso: outputDir/projectName/relativePath
b. Creazione directory (mkdir recursive)
c. Sostituzione placeholder nel contenuto
d. Scrittura file su disco
|
v
4. Restituzione lista file creati
// Richiesta
{
"tool": "scaffold-project",
"arguments": {
"template": "express-api",
"projectName": "user-service",
"outputDir": "/home/user/projects",
"options": {
"author": "Mario Rossi",
"description": "Microservizio gestione utenti",
"license": "MIT"
}
}
}
// Risposta
{
"template": "express-api",
"projectName": "user-service",
"outputDir": "/home/user/projects/user-service",
"filesCreated": [
"package.json", "tsconfig.json", "src/index.ts", "src/app.ts",
"src/routes/health.ts", "src/middleware/error-handler.ts",
".gitignore", "README.md"
],
"totalFiles": 8
}
ツール: 足場コンポーネント
ツール scaffold-component コンポーネント、サービス、
コントローラーまたはモデル。 TypeScript と JavaScript の両方をサポートし、構造を備えたコードを生成します
すぐに使用できる標準:
生成可能なコンポーネントのタイプ
| タイプ | 生成されたファイル | コンテンツ |
|---|---|---|
component |
名前.tsx / 名前.jsx | props インターフェイスを備えた React コンポーネント (TypeScript) |
service |
名前.service.ts / .js | CRUD メソッドを含むクラス: findAll、findById、create、update、delete |
controller |
名前.controller.ts / .js | getAll、getById、create、update、delete ハンドラーを備えた Express コントローラー |
model |
名前.model.ts / .js | インターフェイス + ファクトリ関数の作成/更新 (TS) またはプレーン関数 (JS) |
// Richiesta
{
"tool": "scaffold-component",
"arguments": {
"type": "service",
"name": "User",
"outputDir": "/home/user/projects/user-service/src/services",
"language": "typescript"
}
}
// Risposta
{
"message": "Generated service file: /home/user/projects/user-service/src/services/User.service.ts",
"filePath": "/home/user/projects/user-service/src/services/User.service.ts"
}
イベントバスの統合
サーバー project-scaffolding イベントの公開やサブスクライブは行いません。
これは、明示的なユーザー要求に応じて動作する純粋に生成的なサーバーです。ただし、
生成されたプロジェクトは、他の生産性サーバーですぐに分析できます。
- 依存関係マネージャー: 新しく生成されたプロジェクトの依存関係の脆弱性とライセンスを確認します。
- コードレビュー: テンプレートによって生成されたコードの品質を分析します。
- コードベースの知識: 新しいプロジェクトの構造をマップします。
architecture-map
Productivity Server 間の対話
3 つの生産性サーバーは、補完的に連携して動作します。独立したにも関わらず、 その出力は他のサーバーからの入力をフィードして、ワークフローを作成できます 自動化:
+----------------------+ +---------------------+
| project-scaffolding | genera progetto ---> | dependency-manager |
| | analizzabile | (check-vulnerab.) |
+----------------------+ +---------------------+
|
| genera codice ---> +---------------------+
+-------------------------> | code-review |
| (analyze/suggest) |
+---------------------+
+------------------+ code:commit-analyzed +-------------------+
| code-review | -----------------------------> | standup-notes |
| | code:review-completed | agile-metrics |
+------------------+ -----------------------------> +-------------------+
+---------------------+ code:dependency-alert +-------------------+
| dependency-manager | --------------------------> | standup-notes |
| | | agile-metrics |
+---------------------+ +-------------------+
イベントの概要
| サーバ | イベント | 消費者 |
|---|---|---|
code-review |
code:commit-analyzed |
スタンドアップノート、アジャイルメトリクス |
code-review |
code:review-completed |
スタンドアップノート、アジャイルメトリクス |
dependency-manager |
code:dependency-alert |
スタンドアップノート、アジャイルメトリクス |
project-scaffolding |
誰でもない | - |
一般的なパターン: ステートレス サーバーと純粋な分析
3 つの生産性サーバーはすべて、基本的なアーキテクチャ パターンを共有しています。 私は 完全に無国籍。彼らはデータベースを使用せず、キャッシュを維持しません。 永続的な状態を持つ内部サービスはありません。各ツール呼び出しは独立しており、 自己完結型。
このアプローチにはいくつかの利点があります。
- 冪等性: 同じリクエストは常に同じ結果を生成するため、テストとデバッグが容易になります。
- スケーラビリティ: 共有状態によるボトルネックがなく、サーバーを並行してインスタンス化できます。
- シンプルさ: データベースの移行、セッション管理、クリーンアップは不要です。
- 信頼性: 保存する状態がないため、クラッシュによってデータが失われることはありません。
サーバー code-review 完全に正規表現とパターンカウントによって動作します。
サーバー dependency-manager ファイルシステムから読み取り、呼び出します npm audit
外部プロセスとして。サーバー project-scaffolding ファイルをディスクに書き込みます
メモリ内のテンプレートから開始します。 3 つのいずれもインフラストラクチャのセットアップは必要ありません
追加。
結論
Tech-MCP の 3 つの生産性サーバーは、MCP がどのように自動化できるかを示しています
複雑なインフラストラクチャを必要とせずに、ソフトウェア開発における反復タスクを実現します。
サーバー code-review コードレビューにおける一般的な問題を自動的に検出します。
dependency-manager 脆弱性とライセンスを管理下に置きます。
project-scaffolding 新しいプロジェクトを作成する際の定型文を排除します。
3 つのサーバーすべてにステートレス パターンが採用されているため、特に適しています。 CI/CD パイプラインと自動化されたワークフローに統合され、予測可能性が向上します。 そして副作用がないことが基本的な要件です。
次の記事では、 DevOpsサーバー Tech-MCP スイートの:
docker-compose コンテナ管理のため、 log-analyzer のために
アプリケーションログの分析、e cicd-monitor 監視用
ビルドおよびデプロイメントパイプライン。これらのサーバーがどのようにサーバーと統合されるかを見ていきます。
EventBus を通じて生産性を向上させ、完全な開発ワークフローを作成します
自動化された。
3 つのサーバーの完全なソース コードはリポジトリで入手できます。 GitHub 上の Tech-MCP.







