Skip to content

Commit fae542b

Browse files
authored
mcp (#828)
- **mcp planning docs** - **init mcp package** - **mcp: add server, basic type defs** - **mcp: add hello-world CourseConfig resource** - **mcp: setup test server infra** - **mcp: add create_card tool** - **update todo - local claude-code install successful** - **add resources to query course contents**
2 parents 3a4ddf1 + cf5ebf0 commit fae542b

38 files changed

+20371
-36
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
name: ci-mcp-sanity
2+
permissions:
3+
contents: read
4+
on:
5+
pull_request:
6+
paths:
7+
- 'packages/mcp/**'
8+
- 'packages/common/**' # Added common since it's a dependency
9+
- 'packages/db/**' # Added common since it's a dependency
10+
- '.github/workflows/ci-mcp-sanity.yml'
11+
- 'package.json'
12+
- 'yarn.lock'
13+
14+
jobs:
15+
build-and-test-mcp:
16+
runs-on: ubuntu-latest
17+
steps:
18+
- name: Checkout repository
19+
uses: actions/checkout@v4
20+
21+
- name: Setup Node.js
22+
uses: actions/setup-node@v4
23+
with:
24+
node-version: 20
25+
cache: 'yarn'
26+
27+
- name: Install Yarn
28+
run: corepack enable
29+
30+
- name: Install dependencies
31+
run: yarn
32+
33+
- name: Prepare testdatabase & build library packgaes
34+
run: yarn setup
35+
36+
- name: run test database
37+
run: |
38+
yarn couchdb:start
39+
40+
- name: Build mcp package
41+
run: yarn workspace @vue-skuilder/mcp build
42+
43+
- name: list resources
44+
run: |
45+
yarn workspace @vue-skuilder/mcp test:resources
46+
47+
- name: list tools
48+
run: |
49+
yarn workspace @vue-skuilder/mcp test:resources
50+
51+
- name: list prompts
52+
run: |
53+
yarn workspace @vue-skuilder/mcp test:prompts

CLAUDE.md

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ User often uses dictation software, which, in context, mangles things like `vue`
3737
- Build db: `yarn workspace @vue-skuilder/db build`
3838
- Build express: `yarn workspace @vue-skuilder/express build`
3939
- Test express: `yarn workspace @vue-skuilder/express test`
40+
- Build mcp: `yarn workspace @vue-skuilder/mcp build`
41+
- Dev mcp: `yarn workspace @vue-skuilder/mcp dev` (build + MCP Inspector UI)
42+
- Test mcp: `yarn workspace @vue-skuilder/mcp test:cli`
4043

4144
#### Frontend Packages
4245
- Build platform-ui: `yarn workspace @vue-skuilder/platform-ui build`
@@ -114,6 +117,7 @@ Always resolve to source directories for internal package references:
114117
- `@e2e-db``./packages/e2e-db/src`
115118
- `@cli``./packages/cli/src`
116119
- `@client``./packages/client/src`
120+
- `@mcp``./packages/mcp/src`
117121

118122
### Shared Configuration Features
119123
- **Target**: ES2020 for consistency across packages
@@ -135,12 +139,84 @@ Always resolve to source directories for internal package references:
135139
common → db → common-ui → courses → platform-ui
136140
↓ ↓ ↓
137141
cli express standalone-ui
142+
143+
mcp
138144
```
139145

140146
### Active Packages
141-
- **Backend**: `common`, `db`, `express`, `e2e-db`
147+
- **Backend**: `common`, `db`, `express`, `e2e-db`, `mcp`
142148
- **Frontend**: `platform-ui`, `common-ui`, `courses`, `standalone-ui`
143149
- **CLI**: `cli`
144150

145151
### Legacy/Inactive Packages
146152
- **client**: Legacy HTTP client library, minimal maintenance
153+
154+
## MCP Package (`@vue-skuilder/mcp`)
155+
156+
Model Context Protocol (MCP) server for Vue-Skuilder course content agent access.
157+
158+
### Architecture
159+
Course-scoped MCP servers that accept CourseDBInterface injection:
160+
- **Resources**: Read-only data access (course, cards, tags, elo, shapes)
161+
- **Tools**: Content generation and management operations
162+
- **Prompts**: Templates for guided content creation
163+
164+
### Build System
165+
Uses **tsup** for dual CommonJS/ESM output:
166+
- **ESM**: `dist/index.mjs` (primary)
167+
- **CommonJS**: `dist/index.js` (compatibility)
168+
- **Types**: `dist/index.d.ts`
169+
170+
### Available Resources (14 total)
171+
- `course://config` - Course configuration with metadata and ELO statistics
172+
- `cards://all` - All cards with pagination support
173+
- `cards://tag/{tagName}` - Filter cards by tag name
174+
- `cards://shape/{shapeName}` - Filter cards by DataShape
175+
- `cards://elo/{eloRange}` - Filter cards by ELO range (format: min-max)
176+
- `shapes://all` - List all available DataShapes
177+
- `shapes://{shapeName}` - Specific DataShape information
178+
- `tags://all` - List all available tags
179+
- `tags://stats` - Tag usage statistics
180+
- `tags://{tagName}` - Specific tag information
181+
- `tags://union/{tags}` - Cards with ANY of specified tags (format: tag1+tag2)
182+
- `tags://intersect/{tags}` - Cards with ALL of specified tags (format: tag1+tag2)
183+
- `tags://exclusive/{tags}` - Cards with first tag but NOT second (format: tag1-tag2)
184+
- `tags://distribution` - Frequency distribution of all tags
185+
186+
### Available Tools (4 total)
187+
- `create_card` - Create new course cards with specified datashape and content
188+
- `update_card` - Update existing course cards (data, tags, ELO, sourceRef)
189+
- `tag_card` - Add or remove tags from course cards with optional ELO update
190+
- `delete_card` - Safely delete course cards with confirmation requirement
191+
192+
### Available Prompts (2 total)
193+
- `fill-in-card-authoring` - Generate fill-in-the-blank or multiple-choice cards using Vue-Skuilder syntax
194+
- `elo-scoring-guidance` - Guidance for assigning ELO difficulty ratings to flashcard content
195+
196+
### Key Features
197+
- **ELO-aware**: Native support for Vue-Skuilder's dynamic rating system
198+
- **DataShape aware**: Supports all Vue-Skuilder question types
199+
- **Source linking**: Git-based content provenance tracking
200+
- **Content generation**: Orchestrated courseware creation from source materials
201+
- **Strongly typed**: All resources, tools, and prompts use TypeScript constants
202+
203+
### Usage
204+
```typescript
205+
import { MCPServer } from '@vue-skuilder/mcp';
206+
import { getDataLayer } from '@vue-skuilder/db';
207+
208+
const courseDB = getDataLayer().getCourseDB('course-id');
209+
const server = new MCPServer(courseDB);
210+
```
211+
212+
### Testing
213+
Use MCP Inspector for interactive testing:
214+
```bash
215+
yarn workspace @vue-skuilder/mcp dev # Opens Inspector UI automatically
216+
```
217+
218+
### Dependencies
219+
- `@modelcontextprotocol/sdk` - MCP protocol implementation
220+
- `@vue-skuilder/db` - Database layer access
221+
- `@vue-skuilder/common` - Shared types and utilities
222+
- `zod` - Schema validation

agent/a.1.assessment.md

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
# Assessment: MCP Package for Vue-Skuilder Course Content Agent Access
2+
3+
## Context Analysis
4+
5+
Vue-Skuilder est un système sophistiqué de gestion de contenu éducatif avec une architecture modulaire bien conçue. Le système actuel comprend :
6+
7+
### Architecture Existante
8+
9+
**Backend Core:**
10+
- `@vue-skuilder/db` - Couche d'abstraction de données supportant CouchDB dynamique et données statiques JSON
11+
- `@vue-skuilder/express` - Serveur API REST avec authentification, préprocessing de médias, gestion de cours
12+
- `@vue-skuilder/common` - Types partagés, interfaces, et utilitaires métier
13+
14+
**Data Models Clés:**
15+
- **Courses**: Configuration, cartes, ratings ELO, système de révision espacée
16+
- **Cards**: Contenu d'apprentissage avec tags, attachments media, données ELO
17+
- **DataShapes**: Système de types pour différents formats de questions
18+
- **Study Sessions**: Logique de présentation de contenu avec tracking de progression
19+
- **Content Sources**: Abstraction pour cours et salles de classe
20+
21+
**Patterns Architecturaux:**
22+
- Interface Provider pattern pour la couche de données
23+
- Dual export system (CommonJS/ESM) pour compatibilité maximale
24+
- Système de registration de composants pour découverte automatique
25+
- Configuration build partagée avec alias cross-package
26+
27+
## Objectif du Package MCP
28+
29+
Créer un nouveau package `@vue-skuilder/mcp` qui :
30+
1. Expose les données de cours via le protocole MCP pour accès par des agents
31+
2. Permettra l'intégration avec le serveur Express existant
32+
3. Activera la génération automatisée de contenu de quiz annoté et lié aux sources
33+
4. Supportera l'attachement d'un processus agentique à un répertoire source
34+
35+
## Options d'Architecture
36+
37+
### Option A: Serveur MCP Standalone Intégré
38+
39+
**Approche:** Créer un serveur MCP autonome qui utilise la couche `db` existante et s'intègre comme middleware Express.
40+
41+
**Structure Proposée:**
42+
```
43+
packages/mcp/
44+
├── src/
45+
│ ├── server/ # Serveur MCP core
46+
│ ├── resources/ # Ressources MCP (courses, cards, content)
47+
│ ├── tools/ # Outils MCP (create, update, analyze)
48+
│ ├── prompts/ # Templates de prompts pour génération de contenu
49+
│ ├── integrations/ # Intégration Express middleware
50+
│ └── types/ # Types spécifiques MCP
51+
└── examples/ # Exemples d'usage
52+
```
53+
54+
**Avantages:**
55+
- Réutilise l'infrastructure data layer existante
56+
- Intégration native avec l'écosystème Vue-Skuilder
57+
- Peut bénéficier de l'authentification Express existante
58+
- Support direct des DataShapes et patterns existants
59+
60+
**Inconvénients:**
61+
- Complexité d'intégration avec l'Express server existant
62+
- Nécessite coordination avec l'architecture existante
63+
64+
### Option B: Serveur MCP Hybride avec Accès Direct
65+
66+
**Approche:** Serveur MCP qui peut fonctionner standalone OU comme service intégré, avec accès direct aux APIs data layer.
67+
68+
**Structure Proposée:**
69+
```
70+
packages/mcp/
71+
├── src/
72+
│ ├── core/ # Core MCP functionality
73+
│ ├── adapters/ # Adaptateurs pour différentes sources (db, files, git)
74+
│ ├── services/ # Services métier (quiz generation, content analysis)
75+
│ ├── transports/ # Transports MCP (stdio, http)
76+
│ ├── middleware/ # Express integration layer
77+
│ └── cli/ # CLI pour usage standalone
78+
└── docs/ # Documentation et exemples
79+
```
80+
81+
**Avantages:**
82+
- Flexibilité maximale (standalone ou intégré)
83+
- Peut accéder à différents types de sources de contenu
84+
- Extensible pour futurs cas d'usage
85+
- Découplage propre des concerns
86+
87+
**Inconvénients:**
88+
- Plus complexe à implémenter initialement
89+
- Risque de duplication avec la couche db existante
90+
91+
### Option C: Extension MCP de la Couche DB
92+
93+
**Approche:** Étendre les interfaces de la couche `db` existante avec des capabilities MCP natives.
94+
95+
**Structure Proposée:**
96+
```
97+
packages/mcp/
98+
├── src/
99+
│ ├── providers/ # MCP data providers étendant DataLayerProvider
100+
│ ├── transforms/ # Transformateurs data → MCP resources
101+
│ ├── generators/ # Générateurs de contenu (quiz, annotations)
102+
│ └── server.ts # MCP server factory
103+
└── integration/ # Helpers d'intégration Express
104+
```
105+
106+
**Avantages:**
107+
- Réutilisation maximale du code existant
108+
- Consistency avec les patterns architecturaux
109+
- Implémentation plus rapide
110+
- Intégration naturelle avec les types existants
111+
112+
**Inconvénients:**
113+
- Couplage plus fort avec l'architecture db
114+
- Moins de flexibilité pour sources externes
115+
116+
## Services MCP Proposés
117+
118+
### Resources
119+
- `course://[courseId]` - Configuration et métadonnées de cours
120+
- `cards://[courseId]/[filter]` - Cartes de cours avec filtres optionnels
121+
- `content://[courseId]/[cardId]` - Contenu détaillé d'une carte
122+
- `tags://[courseId]` - Système de tags et taxonomie
123+
- `schema://[courseId]` - DataShapes et structure de données
124+
125+
### Tools
126+
- `analyze_content` - Analyser le contenu source pour opportunités de quiz
127+
- `generate_quiz` - Générer des questions basées sur le contenu source
128+
- `annotate_content` - Créer des annotations liées aux sources
129+
- `validate_quiz` - Valider la qualité des questions générées
130+
- `link_sources` - Créer des liens entre contenu et sources
131+
132+
### Prompts
133+
- `quiz_generation` - Template pour génération structurée de quiz
134+
- `content_analysis` - Template pour analyse de contenu source
135+
- `annotation_creation` - Template pour création d'annotations
136+
137+
## Phases d'Implémentation
138+
139+
### Phase 1: Foundation (MVP)
140+
1. Création du package structure de base
141+
2. Serveur MCP minimal avec ressources cours read-only
142+
3. Integration basique avec Express middleware
143+
4. Tests de bout en bout avec Claude Desktop
144+
145+
### Phase 2: Content Access
146+
1. Resources complètes (courses, cards, tags, schema)
147+
2. Tools de lecture et navigation
148+
3. Support des DataShapes existants
149+
4. Documentation et exemples
150+
151+
### Phase 3: Content Generation
152+
1. Tools de création et modification de contenu
153+
2. Générateurs de quiz avec templates
154+
3. Système d'annotations linkées aux sources
155+
4. Integration avec file system pour source scanning
156+
157+
### Phase 4: Advanced Features
158+
1. Support de différents transports (stdio, HTTP)
159+
2. Authentication et permissions
160+
3. Streaming et performance optimization
161+
4. Analytics et monitoring
162+
163+
# Recommendation
164+
165+
**Option B - Serveur MCP Hybride** est l'approche recommandée car elle offre :
166+
167+
1. **Flexibilité maximale** pour différents cas d'usage
168+
2. **Extensibilité** pour futurs besoins
169+
3. **Découplage propre** des concerns
170+
4. **Path de migration naturel** vers des fonctionnalités avancées
171+
172+
L'implémentation commencerait par un serveur MCP minimal réutilisant la couche `db` existante, puis évolurait vers un système plus sophistiqué avec support de sources multiples et génération de contenu avancée.
173+
174+
Cette approche permet une **verification incrémentale** à chaque phase et une **integration graduelle** avec l'écosystème Vue-Skuilder existant.

0 commit comments

Comments
 (0)