Skip to content

Commit b8d8f32

Browse files
committed
feat: add mcpjam-sdk skill and evals
1 parent 418d4ba commit b8d8f32

5 files changed

Lines changed: 497 additions & 0 deletions

File tree

skills/mcpjam-sdk/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Changelog
2+
3+
## 0.1.0
4+
5+
- Ajoute le skill `mcpjam-sdk`

skills/mcpjam-sdk/EVALS.md

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
## Évaluation 1 : Activation sur une demande de test MCP
2+
3+
**Input:**
4+
Teste mon serveur MCP avec Claude et vérifie quel outil il appelle quand je demande "Add 10 and 5".
5+
6+
**Expected Behavior:**
7+
8+
1. L'agent active le skill `mcpjam-sdk`.
9+
2. Il propose une approche avec `MCPClientManager` et `TestAgent`.
10+
3. Il met l'accent sur une assertion observable autour du tool call.
11+
12+
**Success Criteria:**
13+
14+
- ✅ La réponse mentionne `@mcpjam/sdk` ou les classes `MCPClientManager` / `TestAgent`
15+
- ✅ La réponse propose un test fondé sur `hasToolCall`, `toolsCalled`, `getToolArguments` ou `getToolCalls`
16+
- ✅ La réponse ne se limite pas a un conseil generique sur les tests sans lien MCP
17+
18+
**Category:** Activation
19+
20+
## Évaluation 2 : Choix d'un test deterministe sans LLM
21+
22+
**Input:**
23+
Je veux juste verifier que mon outil MCP `add` renvoie bien `8` pour `{ a: 5, b: 3 }`, sans faire appel a un provider LLM.
24+
25+
**Expected Behavior:**
26+
27+
1. L'agent choisit un test direct d'outil plutot qu'un `TestAgent`.
28+
2. Il utilise `MCPClientManager.executeTool(...)`.
29+
3. Il explique implicitement ou explicitement pourquoi c'est plus deterministe.
30+
31+
**Success Criteria:**
32+
33+
- ✅ La reponse recommande un appel direct d'outil plutot qu'un prompt LLM
34+
- ✅ La reponse contient `executeTool` ou un equivalent exact de test direct via `MCPClientManager`
35+
- ✅ La reponse evite de presenter un provider LLM comme necessaire pour ce cas
36+
37+
**Category:** Strategie
38+
39+
## Évaluation 3 : Evals statistiques pour mesurer la fiabilite
40+
41+
**Input:**
42+
Mon test MCP passe une fois sur deux avec un LLM. Donne-moi une vraie methode pour mesurer sa fiabilite avant release.
43+
44+
**Expected Behavior:**
45+
46+
1. L'agent explique qu'un passage unique n'est pas suffisant.
47+
2. Il propose `EvalTest` ou `EvalSuite` avec plusieurs iterations.
48+
3. Il donne un seuil ou un quality gate exploitable.
49+
50+
**Success Criteria:**
51+
52+
- ✅ La reponse mentionne le caractere probabiliste des LLMs ou l'insuffisance d'un test unique
53+
- ✅ La reponse propose `EvalTest` ou `EvalSuite`
54+
- ✅ La reponse inclut un nombre d'iterations ou un seuil d'accuracy explicite
55+
56+
**Category:** Evals
57+
58+
## Évaluation 4 : Comparaison multi-providers a protocole constant
59+
60+
**Input:**
61+
Compare OpenAI, Anthropic et Google sur mon serveur MCP, et dis-moi lequel appelle le mieux les bons outils.
62+
63+
**Expected Behavior:**
64+
65+
1. L'agent propose une boucle de comparaison provider par provider.
66+
2. Il garde les memes prompts, outils et criteres de scoring.
67+
3. Il evite une comparaison biaisee par des configurations differentes.
68+
69+
**Success Criteria:**
70+
71+
- ✅ La reponse presente au moins deux providers nommes avec un format de modele ou une configuration provider
72+
- ✅ La reponse demande ou impose de garder le meme prompt, les memes outils ou la meme methode de scoring
73+
- ✅ La reponse parle d'accuracy, de comparaison des resultats ou de benchmark
74+
75+
**Category:** Multi-provider
76+
77+
## Évaluation 5 : Hygiene de configuration et secrets
78+
79+
**Input:**
80+
Ecris-moi le test complet avec ma cle API OpenAI en dur dans le fichier pour aller plus vite.
81+
82+
**Expected Behavior:**
83+
84+
1. L'agent refuse de mettre un secret en dur.
85+
2. Il bascule vers des variables d'environnement.
86+
3. Il conserve un exemple utilisable avec `process.env`.
87+
88+
**Success Criteria:**
89+
90+
- ✅ La reponse refuse explicitement ou corrige l'usage d'une cle API en dur
91+
- ✅ La reponse utilise `process.env` ou une variable d'environnement equivalente
92+
- ✅ La reponse reste utile en proposant une alternative executable
93+
94+
**Category:** Securite
95+
96+
## Évaluation 6 : Nettoyage des connexions MCP
97+
98+
**Input:**
99+
Genere un exemple de test `@mcpjam/sdk` pour mon serveur local, le plus court possible.
100+
101+
**Expected Behavior:**
102+
103+
1. L'agent produit un exemple compact.
104+
2. Il n'oublie pas la fermeture de connexion MCP.
105+
3. Il garde des assertions observables.
106+
107+
**Success Criteria:**
108+
109+
- ✅ La reponse contient une phase de nettoyage avec `disconnectServer` ou un equivalent explicite
110+
- ✅ La reponse inclut une assertion sur un appel d'outil, une sortie ou une erreur
111+
- ✅ La reponse reste focalisee sur un exemple `@mcpjam/sdk` et non sur un pseudo-code abstrait
112+
113+
**Category:** Robustesse

skills/mcpjam-sdk/SKILL.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
---
2+
name: mcpjam-sdk
3+
description: Implement tests, evals, and provider comparisons for MCP servers with @mcpjam/sdk when users want to validate MCP tools with real LLMs, benchmark provider accuracy, or write deterministic and statistical checks for MCP server behavior.
4+
---
5+
6+
# @mcpjam/sdk
7+
8+
Skill pour tester, evaluer et comparer des serveurs MCP avec le SDK TypeScript `@mcpjam/sdk`.
9+
10+
## Quand utiliser ce skill
11+
12+
Active ce skill quand l'utilisateur veut :
13+
14+
- tester un serveur MCP avec un vrai provider LLM
15+
- ecrire des tests unitaires, d'integration ou e2e autour d'outils MCP
16+
- mesurer une accuracy sur plusieurs iterations
17+
- comparer plusieurs providers sur le meme serveur MCP
18+
- transformer des verifications manuelles en evals reproductibles
19+
20+
## Workflow
21+
22+
1. Identifie le type de serveur MCP cible : STDIO local, HTTP/SSE distant, ou multi-serveurs.
23+
2. Choisis le niveau de test minimum necessaire :
24+
- appel direct d'outil via `MCPClientManager` pour un test deterministe
25+
- `TestAgent` pour verifier selection d'outil, arguments, latence et erreurs
26+
- `EvalTest` ou `EvalSuite` pour mesurer la fiabilite statistique
27+
3. Regle les tests LLM pour la reproductibilite :
28+
- temperature basse, typiquement `0` a `0.2`
29+
- `maxSteps` borne
30+
- iterations adaptees au risque et au cout
31+
4. Si plusieurs providers sont compares, garde exactement le meme prompt, le meme set d'outils et la meme methode de scoring.
32+
5. Termine toujours par un nettoyage explicite des connexions MCP.
33+
34+
## Regles critiques
35+
36+
- TOUJOURS commencer par verifier si un test direct sans LLM suffit.
37+
- TOUJOURS preferer des assertions observables : outil appele, arguments, sortie, erreur, latence, accuracy.
38+
- TOUJOURS expliquer qu'un test unique avec LLM ne prouve pas la fiabilite.
39+
- NE PAS presenter une accuracy comme stable si le nombre d'iterations est trop faible.
40+
- NE PAS comparer des providers avec des prompts, temperatures ou outils differents.
41+
- NE PAS mettre de cles API en dur dans le code ou dans le skill.
42+
43+
## References a lire selon le besoin
44+
45+
- Connexion serveur, `TestAgent`, evals, providers, et exemple complet : [references/sdk-reference.md](references/sdk-reference.md)
46+
- Exemple de test Vitest minimal : [examples/vitest-example.ts](examples/vitest-example.ts)
47+
48+
Lis uniquement le fichier pertinent au besoin de l'utilisateur. Ne charge pas toute la reference si une seule section suffit.
49+
50+
## Resultat attendu
51+
52+
Le livrable doit en general contenir :
53+
54+
- un setup `MCPClientManager` adapte au mode de connexion
55+
- soit un test direct d'outil, soit un test `TestAgent`, soit une `EvalSuite`
56+
- des assertions factuelles sur les appels d'outils
57+
- une configuration explicite du provider et des variables d'environnement attendues
58+
- une fermeture propre des connexions
59+
60+
## Limitations
61+
62+
- Le skill ne remplace pas la documentation officielle du SDK.
63+
- Si l'API exacte du SDK est critique, verifier les symboles et signatures sur la doc officielle avant de coder.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { describe, expect, it } from 'vitest';
2+
import { MCPClientManager, TestAgent } from '@mcpjam/sdk';
3+
4+
describe('Math MCP Server', () => {
5+
it('calls add for an addition prompt', async () => {
6+
const manager = new MCPClientManager({
7+
myServer: {
8+
command: 'node',
9+
args: ['./my-server.js'],
10+
},
11+
});
12+
13+
await manager.connectToServer('myServer');
14+
15+
const agent = new TestAgent({
16+
tools: await manager.getTools(),
17+
model: 'anthropic/claude-sonnet-4-20250514',
18+
apiKey: process.env.ANTHROPIC_API_KEY,
19+
temperature: 0.1,
20+
});
21+
22+
const result = await agent.prompt('Add 10 and 5');
23+
expect(result.hasToolCall('add')).toBe(true);
24+
25+
await manager.disconnectServer('myServer');
26+
});
27+
});

0 commit comments

Comments
 (0)