소개: 데이터베이스 및 테스트 서버
다음을 통해 관리되는 개발 워크플로에서 모델 컨텍스트 프로토콜, 데이터 구조 이해 코드 품질은 두 가지 기본 요소입니다. 기존 데이터베이스로 작업할 때 다음 사항을 이해해야 합니다. 어떤 테이블이 존재하는지, 어떻게 연결되어 있는지, 어떤 인덱스가 누락되었는지 빠르게 확인할 수 있습니다. 코드를 작성할 때 필요합니다. 자동 테스트를 생성하고, 엣지 케이스를 식별하고, 성능을 측정합니다.
MCP 시리즈의 아홉 번째 기사에서 우리는 분석합니다. 서버 4개 프로젝트의 Tech-MCP 그 덮개 이 두 가지 중요한 영역은 데이터베이스 전용 서버 두 대(db-스키마-탐색기 e 데이터 모의 생성기) 및 테스트 전용 서버 2대(테스트 생성기 e 성능 프로파일러).
이 기사에서 배울 내용
- PRAGMA 내부 검사를 통해 SQLite 데이터베이스 스키마를 탐색하는 방법
- Mermaid 구문으로 ERD 다이어그램 자동 생성
- 색인화되지 않은 외래 키에 대한 자동 색인 제안
- 16개의 내장 생성기로 현실적인 모의 데이터 생성
- 소스 코드에서 단위 테스트 뼈대 자동 생성
- 정적 성능 분석 및 안티 패턴 식별
- 일반적인 이벤트:
db:index-suggestion,test:generated,test:coverage-report,perf:bottleneck-found
서버 1: db-스키마-탐색기
서버 db-스키마-탐색기 SQLite 데이터베이스 스키마를 대화형으로 탐색할 수 있습니다. 데이터 구조를 이해하는 문제를 해결합니다. 기존 데이터베이스로 작업할 때 필요합니다. 어떤 테이블이 존재하는지, 어떻게 연결되어 있는지, 어떤 인덱스가 누락되었는지, 관계를 시각화하는 방법을 빠르게 이해하세요.
서버는 다음에 대한 액세스를 제공합니다. 읽기 전용 어떤 작업도 수행할 수 없도록 보장합니다.
데이터나 스키마를 변경합니다. 도서관 이용 better-sqlite3 깃발과 함께
readonly: true 직접적이고 동기적인 고성능 액세스를 위해.
서버 아키텍처
+------------------------------------------------------------+
| db-schema-explorer server |
| |
| +--------------------------------------------------------+ |
| | Tool Layer | |
| | | |
| | explore-schema describe-table | |
| | suggest-indexes generate-erd | |
| +--------------------------------------------------------+ |
| | |
| v |
| +--------------------------------------------------------+ |
| | better-sqlite3 (readonly: true) | |
| | | |
| | PRAGMA table_info PRAGMA index_list | |
| | PRAGMA index_info PRAGMA foreign_key_list | |
| | sqlite_master SELECT COUNT(*) | |
| +--------------------------------------------------------+ |
| | |
| v |
| +--------------------------------------------------------+ |
| | Event Bus: db:index-suggestion | |
| +--------------------------------------------------------+ |
+------------------------------------------------------------+
사용 가능한 도구
도구 테이블 - db-schema-explorer
| 도구 | 설명 | 매개변수 |
|---|---|---|
explore-schema |
데이터베이스 스키마를 탐색하여 모든 테이블과 해당 열을 반환합니다. | dbPath (문자열) - SQLite 파일의 경로 |
describe-table |
테이블 세부정보: 열, 인덱스, 외래 키 및 행 개수 | dbPath (끈); tableName (끈) |
suggest-indexes |
더 나은 성능을 위해 테이블을 분석하고 누락된 인덱스를 제안합니다. | dbPath (끈) |
generate-erd |
Mermaid erDiagram 구문으로 엔터티 관계 다이어그램 생성 | dbPath (끈) |
기본 데이터 유형
서버는 인트로스펙션에서 반환된 정보를 구조화하는 4개의 TypeScript 인터페이스를 정의합니다. 데이터베이스의:
// TableInfo: informazioni su una tabella
interface TableInfo {
name: string;
columns: ColumnInfo[];
}
// ColumnInfo: dettaglio di una colonna
interface ColumnInfo {
name: string;
type: string; // INTEGER, TEXT, REAL, BLOB, BOOLEAN, DATETIME
nullable: boolean;
primaryKey: boolean;
defaultValue: string | null;
}
// IndexInfo: informazioni su un indice
interface IndexInfo {
name: string;
unique: boolean;
columns: string[];
}
// ForeignKeyInfo: informazioni su una foreign key
interface ForeignKeyInfo {
id: number;
table: string; // tabella referenziata
from: string; // colonna locale
to: string; // colonna referenziata
onUpdate: string;
onDelete: string;
}
사용된 PRAGMA 쿼리
모든 분석은 메타데이터를 제공하는 표준 SQLite PRAGMA 명령을 기반으로 합니다. 데이터를 수정하지 않고 데이터베이스 구조에서:
PRAGMA 및 반환된 정보
| 프라그마 | 사용 | 반환된 정보 |
|---|---|---|
sqlite_master |
테이블 목록 | 테이블 이름(제외됨 sqlite_*) |
PRAGMA table_info |
테이블 열 | cid, 이름, 유형, notnull, dflt_value, pk |
PRAGMA index_list |
인덱스 목록 | 서열, 이름, 고유, 출처, 부분 |
PRAGMA index_info |
인덱스 열 | seqno, cid, 이름 |
PRAGMA foreign_key_list |
외래 키 | id, seq, 테이블, from, to, on_update, on_delete |
예: 스키마 탐색
// Richiesta
{
"tool": "explore-schema",
"arguments": {
"dbPath": "/home/user/data/app.sqlite"
}
}
// Risposta
{
"dbPath": "/home/user/data/app.sqlite",
"tableCount": 3,
"tables": [
{
"name": "users",
"columns": [
{ "name": "id", "type": "INTEGER", "nullable": false, "primaryKey": true },
{ "name": "email", "type": "TEXT", "nullable": false, "primaryKey": false },
{ "name": "name", "type": "TEXT", "nullable": true, "primaryKey": false }
]
},
{
"name": "posts",
"columns": [
{ "name": "id", "type": "INTEGER", "nullable": false, "primaryKey": true },
{ "name": "user_id", "type": "INTEGER", "nullable": false, "primaryKey": false },
{ "name": "title", "type": "TEXT", "nullable": false, "primaryKey": false }
]
}
]
}
예: 자세한 테이블 설명
// Richiesta
{
"tool": "describe-table",
"arguments": {
"dbPath": "/home/user/data/app.sqlite",
"tableName": "posts"
}
}
// Risposta
{
"tableName": "posts",
"rowCount": 1523,
"columns": [
{ "name": "id", "type": "INTEGER", "nullable": false,
"primaryKey": true, "defaultValue": null },
{ "name": "user_id", "type": "INTEGER", "nullable": false,
"primaryKey": false, "defaultValue": null },
{ "name": "title", "type": "TEXT", "nullable": false,
"primaryKey": false, "defaultValue": null }
],
"indexes": [
{ "name": "idx_posts_user_id", "unique": false, "columns": ["user_id"] }
],
"foreignKeys": [
{ "id": 0, "table": "users", "from": "user_id", "to": "id",
"onUpdate": "NO ACTION", "onDelete": "CASCADE" }
]
}
자동 인덱스 제안
도구 suggest-indexes 데이터베이스의 모든 테이블을 분석하고 두 가지 유형의 테이블을 식별합니다.
성능 문제: 전용 인덱스가 없는 외래 키 및 인덱스가 없는 행이 많은 테이블
사용자 정의. 필드가 있는 각 외래 키에 대해 from 색인이 생성되지 않은 경우 서버가 생성합니다.
SQL 명령이 자동으로 CREATE INDEX 동.
// Risposta suggest-indexes
{
"tablesAnalyzed": 5,
"suggestionsCount": 2,
"suggestions": [
{
"table": "comments",
"column": "post_id",
"reason": "Foreign key column referencing \"posts\"(\"id\") is not indexed.",
"suggestedSql": "CREATE INDEX idx_comments_post_id ON \"comments\"(\"post_id\");"
}
]
}
ERD 다이어그램 생성
도구 generate-erd 구문으로 엔터티 관계 다이어그램을 생성합니다. 인어공주 다이어그램,
SQLite 유형을 해당 Mermaid 유형으로 자동 변환합니다. INTEGER 된다
int, TEXT/CHAR 된다 string, REAL/FLOAT 된다
float, BLOB 된다 blob e DATE/TIME 된다
datetime.
erDiagram
users {
int id PK
string email
string name
datetime created_at
}
posts {
int id PK
int user_id
string title
string body
}
users ||--o{ posts : "id -> user_id"
이벤트: db:색인 제안
언제든지 suggest-indexes 색인화되지 않은 공개 외래 키를 식별합니다.
이벤트 db:index-suggestion 페이로드가 있는 이벤트 버스에서:
{
database: string, // percorso al file SQLite
table: string, // nome della tabella
columns: string[], // colonne da indicizzare
reason: string // motivazione del suggerimento
}
이 이벤트는 다음과 같은 서버에서 구독할 수 있습니다. agile-metrics o
standup-notes 제안된 최적화를 자동으로 추적합니다.
서버 2: 데이터 모의 생성기
서버 데이터 모의 생성기 테스트, 개발, 프로토타이핑을 위한 현실적인 모의 데이터를 생성합니다.
애플리케이션을 테스트하려면 실제 데이터와 유사한 데이터가 필요하지만 수동으로 생성하면 확장되지 않습니다.
이 서버는 16가지 유형의 발전기, JSON 및 CSV 출력을 지원하며 종속성이 없습니다.
외부 데이터 생성용: 단독으로 사용 Math.random() e
crypto.randomUUID().
사용 가능한 도구
도구 테이블 - 데이터 모의 생성기
| 도구 | 설명 | 매개변수 |
|---|---|---|
generate-mock-data |
필드/유형 패턴을 기반으로 데이터 행을 생성합니다. | schema ({필드, 유형}의 배열); count (1~10000, 기본값: 10) |
generate-json |
속성 및 형식 힌트를 사용하여 JSON 스키마에서 JSON 개체 생성 | jsonSchema (속성을 가진 객체); count (1~10000, 기본값: 10) |
generate-csv |
구성 가능한 헤더 및 구분 기호를 사용하여 CSV 형식으로 데이터 생성 | columns ({이름, 유형}의 배열); count (1-10000); delimiter (기본: ",") |
list-generators |
설명과 함께 사용 가능한 모든 생성기 유형을 나열합니다. | 아무도 |
16개의 내장 생성기
서비스 계층 generators.ts 기본 데이터 세트(이름, 성, 거리, 도시, 회사,
로렘 단어, 도메인) 및 16개의 생성기 기능, 각각 레지스트리에 등록됨
Record<string, GeneratorInfo>:
사용 가능한 발전기
| 이름 | 출력 유형 | 설명 | Esempio |
|---|---|---|---|
firstName |
string | 40개의 풀에서 임의의 이름 | "제니퍼" |
lastName |
string | 40명 중 무작위 성 | "마르티네즈" |
email |
string | 이름+성+도메인을 결합한 이메일 | "jennifer_martinez42@example.com" |
phone |
string | 미국 전화 형식(XXX) XXX-XXXX | "(415) 555-1234" |
address |
string | 주소: 번호 + 거리 + 도시 | "4521 Oak Ave, 시애틀" |
company |
string | 20개 풀의 회사 이름 | '스타크 인더스트리' |
date |
string | 2000년에서 2025년 사이의 날짜 YYYY-MM-DD | "2018-07-23" |
integer |
숫자 | 0에서 10000 사이의 정수 | 4287 |
float |
숫자 | 2자리의 10진수, 0-10000 | 3456.78 |
boolean |
부울 | 참 또는 거짓(50/50) | 진실 |
uuid |
string | crypto.randomUUID()를 통한 UUID v4 | "550e8400-e29b-..." |
sentence |
string | Lorem ipsum 문장 5-15 단어 | "Lorem ipsum dolor sit amet." |
paragraph |
string | 3-7개의 로렘 문장으로 구성된 단락 | "로렘 입숨... 돌로르 앉아..." |
url |
string | 프로토콜, 도메인, 경로가 포함된 URL | "https://app.demo.io/docs" |
ipv4 |
string | 유효한 v4 IP 주소 | "192.168.42.1" |
hexColor |
string | #이 포함된 16진수 색상 | "#a3f2c1" |
예: 스키마에서 데이터 생성
// Richiesta
{
"tool": "generate-mock-data",
"arguments": {
"schema": [
{ "field": "id", "type": "uuid" },
{ "field": "name", "type": "firstName" },
{ "field": "surname", "type": "lastName" },
{ "field": "email", "type": "email" },
{ "field": "active", "type": "boolean" }
],
"count": 3
}
}
// Risposta
[
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Jennifer",
"surname": "Martinez",
"email": "jennifer.martinez@example.com",
"active": true
},
{
"id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"name": "Robert",
"surname": "Smith",
"email": "robert_smith42@test.org",
"active": false
}
]
예: JSON 스키마에서 생성
도구 generate-json 속성이 포함된 JSON 스키마를 가져와 자동으로 확인합니다.
올바른 생성기: 먼저 필드를 확인하세요. format (이메일, uri, uuid, ipv4, 날짜),
그런 다음 다시 떨어집니다. type (문자열은 문장이 되고, 숫자는 부동소수가 되고, 정수는 정수가 되고,
부울은 부울이 됩니다.)
// Richiesta
{
"tool": "generate-json",
"arguments": {
"jsonSchema": {
"properties": {
"userId": { "type": "string", "format": "uuid" },
"email": { "type": "string", "format": "email" },
"registeredAt": { "type": "string", "format": "date" },
"score": { "type": "integer" }
}
},
"count": 2
}
}
// Risposta
[
{ "userId": "abc-123-...", "email": "james.lee@mock.dev",
"registeredAt": "2019-03-15", "score": 7842 },
{ "userId": "def-456-...", "email": "mary_white@demo.net",
"registeredAt": "2022-11-08", "score": 1256 }
]
예: CSV 생성
도구 generate-csv 구분 기호, 따옴표 이스케이프를 올바르게 처리합니다.
개행 문자. 값에 구분 기호, 따옴표 또는 \n, 그가 온다
큰따옴표로 묶이고 내부 따옴표가 두 배로 표시됩니다.
// Richiesta con delimiter: ";"
Nome;Cognome;IP
James;Smith;192.168.1.42
Linda;Johnson;10.0.0.15
Robert;Williams;172.16.5.200
db-schema-explorer와 통합
두 데이터베이스 서버는 상호 보완적입니다. db-schema-explorer 가이드
모의 데이터에 대한 스키마 정의. AI는 데이터베이스의 구조를 탐색하고 추출할 수 있습니다.
열 유형을 지정하고 직접 전달합니다. generate-mock-data 테이블을 채우려면
현실적인 테스트 데이터로
서버 3: 테스트 생성기
서버 테스트 생성기 단위 테스트의 자동 생성에 전념합니다. 엣지 케이스 식별 및 코드 적용 범위 분석. 그리고 출발점 MCP Suite 내의 모든 테스트 워크플로를 위해 코드 간 전환이 가능합니다. 몇 초 만에 스켈레톤 소스를 테스트할 수 있습니다.
서버가 완전히 무국적: 데이터베이스나 내부 저장소가 없습니다. 소스 코드를 입력으로 받아 함수 서명으로 구문 분석하고 반환합니다. 호출 간 상태를 유지하지 않고 구조화된 출력입니다.
사용 가능한 도구
도구 테이블 - 테스트 생성기
| 도구 | 설명 | 매개변수 |
|---|---|---|
generate-unit-tests |
함수 시그니처를 분석하여 단위 테스트 뼈대 생성 | code (끈); language (기본값: 타이프스크립트); framework (비테스트 | 농담 | 모카) |
find-edge-cases |
코드를 분석하고 심각도별로 분류된 엣지 케이스를 제안합니다. | code (끈) |
analyze-coverage |
소스의 함수를 테스트의 참조와 비교하고 적용 범위를 계산합니다. | sourceCode (끈); testCode (끈) |
자동 테스트 생성
도구 generate-unit-tests 두 가지 패턴을 찾기 위해 소스 코드를 구문 분석합니다.
선언: 클래식 함수(export function name(params)) 및 화살표 기능
(export const name = (params) =>). 발견된 각 함수에 대해 블록을 생성합니다.
describe/it 미리 정의된 세 가지 테스트를 사용합니다.
// Input: codice sorgente
export function calculateTotal(items: Item[], tax: number): number {
return items.reduce((sum, item) => sum + item.price, 0) * (1 + tax);
}
export const formatCurrency = (amount: number): string => {
return new Intl.NumberFormat('it-IT',
{ style: 'currency', currency: 'EUR' }
).format(amount);
};
// Output generato (framework: vitest)
import { describe, it, expect } from 'vitest';
// import { calculateTotal, formatCurrency } from './source';
describe('calculateTotal', () => {
it('should exist and be callable', () => {
expect(calculateTotal).toBeDefined();
expect(typeof calculateTotal).toBe('function');
});
it('should return expected result with valid input', () => {
const result = calculateTotal(/* items */, /* tax */);
expect(result).toBeDefined();
// TODO: Add specific assertions
});
it('should handle edge cases', () => {
// TODO: Test with null/undefined inputs
// TODO: Test with empty values
// TODO: Test with boundary values
});
});
엣지 케이스 식별
도구 find-edge-cases 잠재적인 가능성을 식별하기 위해 코드의 정적 분석을 수행합니다.
엣지 케이스. 검사는 심각도(높은, 중간,
낮은) 다양한 카테고리를 다루고 있습니다.
감지된 엣지 홈 카테고리
| 범주 | 심각성 | 검출 조건 |
|---|---|---|
null/undefined |
높은 | 함수에 매개변수의 존재 |
empty-string |
높은 | 사용 .length, .trim(), .split() |
empty-array |
높은 | 사용 .map(), .filter(), .reduce() |
zero |
높은 | 사용 parseInt, parseFloat, Math.* |
division-by-zero |
높은 | 운영자의 존재 / |
async-rejection |
높은 | 존재 async, await, Promise |
error-propagation |
높은 | 블록의 존재 try/catch |
file-not-found |
높은 | 사용 readFile, writeFile, fs.* |
whitespace-string |
중간 | 문자열 메소드 사용 |
negative-numbers |
높은 | 숫자 함수 사용 |
nested-null |
중간 | 사용 ?., ||, && |
regex-edge-cases |
중간 | 사용 RegExp, .match(), .test() |
커버리지 분석
도구 analyze-coverage 소스 코드를 테스트 코드와 비교하여 결정
어떤 기능이 다루어지는지. 이 프로세스에는 소스에서 함수 이름 추출,
테스트에서 참조 검색(블록 describe(), 블록 it()/test(),
직접 통화) 및 백분율 계산.
Sorgente Test
+------------------+ +------------------+
| function add() | ------> | describe('add') | COPERTA
| function sub() | ------> | test('sub ...') | COPERTA
| function mul() | --X | | SCOPERTA
| function div() | --X | | SCOPERTA
+------------------+ +------------------+
Coverage: 2/4 = 50%
테스트 생성기 이벤트
서버는 이벤트 버스에 두 가지 이벤트를 게시합니다.
-
test:generated: 발행자generate-unit-tests페이로드 포함{ filePath: string, testCount: number, framework: string } -
test:coverage-report: 발행자analyze-coverage페이로드 포함{ filePath: string, coverage: number, uncoveredLines: number[] }
이러한 이벤트는 다음을 통해 구독할 수 있습니다. agile-metrics 적용 범위 측정항목을 포함하려면
스프린트 분석에서 또는 standup-notes 생성된 테스트를 자동으로 기록합니다.
서버 4: 성능 프로파일러
서버 성능 프로파일러 정적 성능 분석 도구 제공 JavaScript 및 TypeScript 코드용. 런타임 프로파일러와 달리 이 서버는 코드를 분석합니다. 출처 실행하지 않고,알려진 성능 안티 패턴, 과도한 의존성 식별 실행 가능한 벤치마크 템플릿을 생성합니다.
이 서버의 기본 원리는 안전 설계: 실행되지 않음
eval() 임의의 코드도 아닙니다. 도구 benchmark-compare Node.js 템플릿을 생성합니다.
사용자는 자신의 환경에서 별도로 실행할 수 있습니다.
사용 가능한 도구
도구 테이블 - 성능 프로파일러
| 도구 | 설명 | 매개변수 |
|---|---|---|
analyze-bundle |
번들 크기 및 심각한 가져오기 문제에 대해 JS/TS 파일 분석 | filePath (문자열) - 파일 또는 디렉터리의 경로 |
find-bottlenecks |
성능 안티 패턴에 대한 정적 코드 분석 | code (끈); language (타이프스크립트 | 자바스크립트 | jsx | tsx) |
benchmark-compare |
두 코드 조각을 비교하기 위한 벤치마크 템플릿 생성 | codeA (끈); codeB (끈); iterations (기본값: 1000) |
번들 분석
도구 analyze-bundle JavaScript 및 TypeScript 파일(개별 또는 전체 디렉터리 제외)을 읽습니다.
node_modules e dist) 알려진 무거운 종속성을 찾는 가져오기를 분석합니다.
감지된 각 대형 패킷에 대해 서버는 예상 크기와 대안을 제공합니다.
라이터.
대용량 패킷이 인식됨
| 패키지 | 예상 크기 | 제안된 대안 |
|---|---|---|
moment |
로케일 포함 ~300KB | date-fns (~20KB) 또는 dayjs (~2KB) |
lodash |
~70KB 축소 | lodash-es 나무가 흔들리면서 |
rxjs |
~50KB+(전체 가져오기) | 특정 수입품: rxjs/operators |
aws-sdk |
>100MB | @aws-sdk/client-* v3 모듈식 |
jquery |
~85KB 축소됨 | 네이티브 DOM API |
three |
~600KB+ | 다음에서 가져오기 three/examples/jsm/ |
병목 현상 식별
도구 find-bottlenecks 코드의 라인별 정적 분석을 수행하여 안티 패턴을 탐지합니다.
심각도가 다음과 같이 분류된 성능 비판적인, 경고 o
정보:
성능 안티 패턴이 감지되었습니다.
| 유형 | 심각성 | 패턴 감지 |
|---|---|---|
nested-loop |
비판적인 | 루프 for/while 중첩(O(n^2)) |
sync-io |
경고 | readFileSync, writeFileSync, execSync |
linear-search-in-loop |
경고 | .indexOf(), .includes(), .find() 루프 내부 |
dom-query-in-loop |
비판적인 | document.querySelector 루프 내부 |
sequential-await |
경고 | await 루프 내부 for/while |
json-in-loop |
경고 | JSON.parse/stringify 루프 내부 |
missing-pagination |
경고 | .findAll(), SELECT * FROM 제한 없이 |
string-concat-in-loop |
정보 | 문자열 연결 += 루프 내부 |
recursion |
정보 | 메모하지 않고 자신을 호출하는 함수 |
발견된 각 병목 현상에 대해 출력에는 문제 유형, 심각도, 라인 및 설명이 포함됩니다. 수정 제안:
{
"type": "nested-loop",
"severity": "critical",
"line": 42,
"description": "Nested loop detected - potential O(n^2)...",
"suggestion": "Consider using a Map/Set for lookups...",
"pattern": "for (const item of items) {"
}
벤치마크 생성
도구 benchmark-compare 성능을 비교하기 위해 완전한 Node.js 파일 생성
두 개의 코드 조각 중 하나입니다. 템플릿에는 준비(반복의 10%), 측정의 4단계가 포함되어 있습니다.
와 performance.now(), 통계 계산(평균, 중앙값, 최소, 최대, p95, p99, stdDev, ops/sec)
어떤 조각이 더 빠르고 얼마나 빠른지 나타내는 최종 비교입니다.
// Richiesta
{
"tool": "benchmark-compare",
"arguments": {
"codeA": "const result = arr.filter(x => x > 0).map(x => x * 2);",
"codeB": "const result = []; for (const x of arr) { if (x > 0) result.push(x * 2); }",
"iterations": 5000
}
}
출력은 실행할 준비가 된 완전한 Node.js 템플릿입니다. node benchmark.js.
서버는 생성된 코드를 실행하지 않습니다. 보안은 설계에 따라 보장됩니다.
성능 프로파일러 이벤트
서버는 이벤트 버스에 두 가지 이벤트를 게시합니다.
-
perf:bottleneck-found: 발행자find-bottlenecks심각도 병목 현상에 대해서만critical, 페이로드 포함{ location: string, metric: string, value: number, threshold: number } -
perf:profile-completed: 발행자benchmark-compare페이로드 포함{ target: string, durationMs: number, results: object }
4개 서버 간의 상호 작용
이 문서에서 분석된 4개의 서버는 독립적으로 작동하지 않고 서로를 보완합니다. 보완적인 작업 흐름과 이벤트 버스를 통해:
+---------------------+ db:index-suggestion +-------------------+
| db-schema-explorer | ------------------------> | agile-metrics |
| | | standup-notes |
+---------------------+ +-------------------+
^
| (dbPath come input)
|
+---------------------+
| data-mock-generator | genera dati che possono
| | popolare il database
+---------------------+
+-------------------+ test:generated +-------------------+
| test-generator | --------------------------> | standup-notes |
| | test:coverage-report +-------------------+
| | --------------------------> | agile-metrics |
+-------------------+ +-------------------+
+----------------------+ perf:bottleneck-found +-------------------+
| performance-profiler | -----------------------> | standup-notes |
| | perf:profile-completed +-------------------+
| | -----------------------> | agile-metrics |
+----------------------+ +-------------------+
게시된 이벤트 요약
| 이벤트 | 소스 서버 | 발급자 도구 | 잠재적인 구독자 |
|---|---|---|---|
db:index-suggestion |
db-스키마-탐색기 | 제안 색인 | 애자일 지표, 스탠드업 노트 |
test:generated |
테스트 생성기 | 단위 테스트 생성 | 스탠드업 노트 |
test:coverage-report |
테스트 생성기 | 분석 범위 | 민첩한 측정항목 |
perf:bottleneck-found |
성능 프로파일러 | 병목 현상 찾기 | 스탠드업 노트, 애자일 지표 |
perf:profile-completed |
성능 프로파일러 | 벤치마크 비교 | 민첩한 측정항목 |
일반적인 결합 작업 흐름
4개의 서버를 모두 결합하는 일반적인 작업 흐름은 다음과 같습니다.
- 스키마 탐색: AI가 사용하는 것
explore-schema데이터베이스 구조를 이해하기 위해 - 인덱스 제안:
suggest-indexes누락된 최적화를 식별하고 게시합니다.db:index-suggestion - 데이터 생성:
generate-mock-data탐색된 스키마를 기반으로 테스트 픽스쳐 생성 - 테스트 생성:
generate-unit-tests애플리케이션 코드에 대한 테스트 뼈대 생성 및 게시test:generated - 엣지 케이스 분석:
find-edge-cases테스트에서 다루어야 할 경계선 사례를 식별합니다. - 프로파일링:
find-bottlenecks안티 패턴에 대한 코드를 구문 분석하고 게시합니다.perf:bottleneck-found - 벤치마크:
benchmark-compare대체 구현을 비교하기 위한 템플릿 생성
결론
이 기사에서 분석된 4개의 서버는 MCP가 어떻게 두 가지 중요한 단계를 처리할 수 있는지 보여줍니다.
개발 주기: 데이터 구조 이해 그리고 품질 보증
코드의. 서버 db-schema-explorer PRAGMA를 통해 완전한 성찰을 제공합니다.
인덱스 제안 및 ERD 다이어그램 생성. 서버 data-mock-generator 제공하다
JSON 및 CSV로 현실적인 데이터를 생성하는 16개의 생성기. 서버 test-generator 자동화하다
엣지 케이스 식별을 통해 단위 테스트를 생성합니다. 서버 performance-profiler
병목 현상을 식별하고 벤치마크를 생성하기 위해 정적 분석을 수행합니다.
다음 글에서는 분석해보겠습니다. 프로젝트 관리 서버: scrum-board,
agile-metrics, time-tracking, project-economics e
retrospective-manager, 민첩한 프로젝트 관리를 제공하는 5개의 서버
AI 인터페이스에서 직접.
모든 서버의 전체 코드는 저장소에서 사용할 수 있습니다. GitHub의 Tech-MCP.







