@lyrra/mcp-server 1.0.1 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/Dockerfile +16 -0
  2. package/README.md +95 -16
  3. package/dist/client.d.ts +7 -1
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +5 -5
  6. package/dist/client.js.map +1 -1
  7. package/dist/config.d.ts +1 -0
  8. package/dist/config.d.ts.map +1 -1
  9. package/dist/config.js +1 -0
  10. package/dist/config.js.map +1 -1
  11. package/dist/http-server.d.ts +8 -0
  12. package/dist/http-server.d.ts.map +1 -0
  13. package/dist/http-server.js +466 -0
  14. package/dist/http-server.js.map +1 -0
  15. package/dist/index.js +3 -69
  16. package/dist/index.js.map +1 -1
  17. package/dist/server-factory.d.ts +8 -0
  18. package/dist/server-factory.d.ts.map +1 -0
  19. package/dist/server-factory.js +82 -0
  20. package/dist/server-factory.js.map +1 -0
  21. package/dist/tools/admin.d.ts +132 -0
  22. package/dist/tools/admin.d.ts.map +1 -1
  23. package/dist/tools/admin.js +105 -101
  24. package/dist/tools/admin.js.map +1 -1
  25. package/dist/tools/ai-designer.d.ts +148 -0
  26. package/dist/tools/ai-designer.d.ts.map +1 -1
  27. package/dist/tools/ai-designer.js +80 -76
  28. package/dist/tools/ai-designer.js.map +1 -1
  29. package/dist/tools/analytics.d.ts +47 -0
  30. package/dist/tools/analytics.d.ts.map +1 -1
  31. package/dist/tools/analytics.js +38 -34
  32. package/dist/tools/analytics.js.map +1 -1
  33. package/dist/tools/auth.d.ts +30 -0
  34. package/dist/tools/auth.d.ts.map +1 -1
  35. package/dist/tools/auth.js +31 -27
  36. package/dist/tools/auth.js.map +1 -1
  37. package/dist/tools/blocks.d.ts +200 -0
  38. package/dist/tools/blocks.d.ts.map +1 -1
  39. package/dist/tools/blocks.js +154 -150
  40. package/dist/tools/blocks.js.map +1 -1
  41. package/dist/tools/connections.d.ts +86 -0
  42. package/dist/tools/connections.d.ts.map +1 -1
  43. package/dist/tools/connections.js +70 -66
  44. package/dist/tools/connections.js.map +1 -1
  45. package/dist/tools/eduflow.d.ts +223 -0
  46. package/dist/tools/eduflow.d.ts.map +1 -1
  47. package/dist/tools/eduflow.js +114 -93
  48. package/dist/tools/eduflow.js.map +1 -1
  49. package/dist/tools/participants.d.ts +110 -0
  50. package/dist/tools/participants.d.ts.map +1 -1
  51. package/dist/tools/participants.js +62 -58
  52. package/dist/tools/participants.js.map +1 -1
  53. package/dist/tools/presentation.d.ts +116 -0
  54. package/dist/tools/presentation.d.ts.map +1 -1
  55. package/dist/tools/presentation.js +51 -47
  56. package/dist/tools/presentation.js.map +1 -1
  57. package/dist/tools/projects.d.ts +65 -0
  58. package/dist/tools/projects.d.ts.map +1 -1
  59. package/dist/tools/projects.js +48 -44
  60. package/dist/tools/projects.js.map +1 -1
  61. package/dist/tools/resources.d.ts +46 -0
  62. package/dist/tools/resources.d.ts.map +1 -1
  63. package/dist/tools/resources.js +32 -28
  64. package/dist/tools/resources.js.map +1 -1
  65. package/dist/tools/store.d.ts +62 -0
  66. package/dist/tools/store.d.ts.map +1 -1
  67. package/dist/tools/store.js +59 -55
  68. package/dist/tools/store.js.map +1 -1
  69. package/mcp-config.example.json +4 -5
  70. package/package.json +7 -2
  71. package/src/client.ts +12 -5
  72. package/src/config.ts +1 -0
  73. package/src/http-server.ts +573 -0
  74. package/src/index.ts +3 -94
  75. package/src/server-factory.ts +109 -0
  76. package/src/tools/admin.ts +20 -14
  77. package/src/tools/ai-designer.ts +16 -10
  78. package/src/tools/analytics.ts +13 -7
  79. package/src/tools/auth.ts +32 -26
  80. package/src/tools/blocks.ts +18 -12
  81. package/src/tools/connections.ts +14 -8
  82. package/src/tools/eduflow.ts +36 -12
  83. package/src/tools/participants.ts +15 -9
  84. package/src/tools/presentation.ts +12 -6
  85. package/src/tools/projects.ts +14 -8
  86. package/src/tools/resources.ts +12 -6
  87. package/src/tools/store.ts +14 -8
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/tools/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;+DAU0C,GAAG;;;;;;;;;;;mCAiB/B;YAAE,WAAW,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;;;6BA0B7B;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE;;CAI/C,CAAC"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/tools/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG3C,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,WAAW;;;;;;;;;;;;;;;;;;;;;;+DAWkB,GAAG;;;;;;;;;;;mCAiB/B;YAAE,WAAW,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;;;6BA0B7B;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE;;EAK/C;AAGD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;+DAnD0C,GAAG;;;;;;;;;;;mCAiB/B;YAAE,WAAW,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;;;;;;;;6BA0B7B;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE;;CAQS,CAAC"}
@@ -1,62 +1,66 @@
1
1
  import { z } from 'zod';
2
- import { client } from '../client.js';
3
- export const storeTools = {
4
- store_list_audiobooks: {
5
- description: 'Lister les audiobooks disponibles dans le store LYRRA. Supporte la pagination, recherche et filtres.',
6
- inputSchema: z.object({
7
- page: z.number().optional().describe('Page (défaut: 1)'),
8
- limit: z.number().optional().describe('Nombre par page (défaut: 20)'),
9
- search: z.string().optional().describe('Recherche par titre/auteur'),
10
- category: z.string().optional().describe('Filtrer par catégorie'),
11
- featured: z.boolean().optional().describe('Uniquement les audiobooks mis en avant'),
12
- }),
13
- handler: async ({ page, limit, search, category, featured }) => {
14
- const params = new URLSearchParams();
15
- if (page)
16
- params.set('page', String(page));
17
- if (limit)
18
- params.set('limit', String(limit));
19
- if (search)
20
- params.set('search', search);
21
- if (category)
22
- params.set('category', category);
23
- if (featured)
24
- params.set('featured', 'true');
25
- const query = params.toString() ? `?${params}` : '';
26
- return client.post(`/store/public/audiobooks${query}`, {});
2
+ import { client as defaultClient } from '../client.js';
3
+ export function createStoreTools(c) {
4
+ return {
5
+ store_list_audiobooks: {
6
+ description: 'Lister les audiobooks disponibles dans le store LYRRA. Supporte la pagination, recherche et filtres.',
7
+ inputSchema: z.object({
8
+ page: z.number().optional().describe('Page (défaut: 1)'),
9
+ limit: z.number().optional().describe('Nombre par page (défaut: 20)'),
10
+ search: z.string().optional().describe('Recherche par titre/auteur'),
11
+ category: z.string().optional().describe('Filtrer par catégorie'),
12
+ featured: z.boolean().optional().describe('Uniquement les audiobooks mis en avant'),
13
+ }),
14
+ handler: async ({ page, limit, search, category, featured }) => {
15
+ const params = new URLSearchParams();
16
+ if (page)
17
+ params.set('page', String(page));
18
+ if (limit)
19
+ params.set('limit', String(limit));
20
+ if (search)
21
+ params.set('search', search);
22
+ if (category)
23
+ params.set('category', category);
24
+ if (featured)
25
+ params.set('featured', 'true');
26
+ const query = params.toString() ? `?${params}` : '';
27
+ return c.post(`/store/public/audiobooks${query}`, {});
28
+ },
27
29
  },
28
- },
29
- store_get_audiobook: {
30
- description: 'Détails complets d\'un audiobook : chapitres, auteur, avis, prix en crédits, statistiques.',
31
- inputSchema: z.object({
32
- audiobookId: z.string().describe('ID de l\'audiobook'),
33
- }),
34
- handler: async ({ audiobookId }) => {
35
- return client.get(`/store/public/audiobooks/${audiobookId}`);
30
+ store_get_audiobook: {
31
+ description: 'Détails complets d\'un audiobook : chapitres, auteur, avis, prix en crédits, statistiques.',
32
+ inputSchema: z.object({
33
+ audiobookId: z.string().describe('ID de l\'audiobook'),
34
+ }),
35
+ handler: async ({ audiobookId }) => {
36
+ return c.get(`/store/public/audiobooks/${audiobookId}`);
37
+ },
36
38
  },
37
- },
38
- store_list_authors: {
39
- description: 'Lister les auteurs mis en avant sur le store.',
40
- inputSchema: z.object({}),
41
- handler: async () => {
42
- return client.get('/store/public/authors/featured');
39
+ store_list_authors: {
40
+ description: 'Lister les auteurs mis en avant sur le store.',
41
+ inputSchema: z.object({}),
42
+ handler: async () => {
43
+ return c.get('/store/public/authors/featured');
44
+ },
43
45
  },
44
- },
45
- store_my_library: {
46
- description: 'Récupérer ma bibliothèque d\'audiobooks achetés.',
47
- inputSchema: z.object({}),
48
- handler: async () => {
49
- return client.get('/store/my-library');
46
+ store_my_library: {
47
+ description: 'Récupérer ma bibliothèque d\'audiobooks achetés.',
48
+ inputSchema: z.object({}),
49
+ handler: async () => {
50
+ return c.get('/store/my-library');
51
+ },
50
52
  },
51
- },
52
- store_search: {
53
- description: 'Rechercher des audiobooks dans le store par mot-clé.',
54
- inputSchema: z.object({
55
- query: z.string().describe('Terme de recherche'),
56
- }),
57
- handler: async ({ query }) => {
58
- return client.post('/store/public/audiobooks', { search: query });
53
+ store_search: {
54
+ description: 'Rechercher des audiobooks dans le store par mot-clé.',
55
+ inputSchema: z.object({
56
+ query: z.string().describe('Terme de recherche'),
57
+ }),
58
+ handler: async ({ query }) => {
59
+ return c.post('/store/public/audiobooks', { search: query });
60
+ },
59
61
  },
60
- },
61
- };
62
+ };
63
+ }
64
+ // Backward compatibility for stdio mode
65
+ export const storeTools = createStoreTools(defaultClient);
62
66
  //# sourceMappingURL=store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/tools/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/tools/store.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,13 @@
1
1
  {
2
2
  "mcpServers": {
3
3
  "lyrra-studio": {
4
- "command": "node",
5
- "args": ["dist/index.js"],
6
- "cwd": "<CHEMIN_ABSOLU>/backend/mcp-server",
4
+ "command": "npx",
5
+ "args": ["-y", "@lyrra/mcp-server"],
7
6
  "env": {
8
7
  "LYRRA_CLIENT_ID": "VOTRE_CLIENT_ID",
9
8
  "LYRRA_CLIENT_SECRET": "rak_VOTRE_CLIENT_SECRET",
10
- "LYRRA_API_URL": "http://localhost:3001/api",
11
- "LYRRA_EDUFLOW_API_URL": "http://localhost:3001/eduflow"
9
+ "LYRRA_API_URL": "https://lyrrastudio.com/api",
10
+ "LYRRA_EDUFLOW_API_URL": "https://lyrrastudio.com/api/eduflow"
12
11
  }
13
12
  }
14
13
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lyrra/mcp-server",
3
- "version": "1.0.1",
3
+ "version": "1.1.1",
4
4
  "description": "LYRRA Studio MCP Server - Pilotez LYRRA Studio depuis Claude AI, Cursor, etc.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -10,10 +10,15 @@
10
10
  "scripts": {
11
11
  "build": "tsc",
12
12
  "start": "node dist/index.js",
13
- "dev": "tsx src/index.ts"
13
+ "start:http": "node dist/http-server.js",
14
+ "dev": "tsx src/index.ts",
15
+ "dev:http": "tsx src/http-server.ts"
14
16
  },
15
17
  "dependencies": {
16
18
  "@modelcontextprotocol/sdk": "^1.12.1",
19
+ "@types/cors": "^2.8.19",
20
+ "@types/express": "^5.0.6",
21
+ "cors": "^2.8.6",
17
22
  "zod": "^3.24.0"
18
23
  },
19
24
  "devDependencies": {
package/src/client.ts CHANGED
@@ -1,5 +1,12 @@
1
1
  import { config } from './config.js';
2
2
 
3
+ export interface LyrraClientOptions {
4
+ apiUrl?: string;
5
+ eduflowUrl?: string;
6
+ clientId?: string;
7
+ clientSecret?: string;
8
+ }
9
+
3
10
  export class LyrraClient {
4
11
  private apiUrl: string;
5
12
  private eduflowUrl: string;
@@ -7,11 +14,11 @@ export class LyrraClient {
7
14
  private clientSecret: string;
8
15
  private jwtToken: string | null = null;
9
16
 
10
- constructor() {
11
- this.apiUrl = config.apiUrl;
12
- this.eduflowUrl = config.eduflowApiUrl;
13
- this.clientId = config.clientId;
14
- this.clientSecret = config.clientSecret;
17
+ constructor(options?: LyrraClientOptions) {
18
+ this.apiUrl = options?.apiUrl || config.apiUrl;
19
+ this.eduflowUrl = options?.eduflowUrl || config.eduflowApiUrl;
20
+ this.clientId = options?.clientId || config.clientId;
21
+ this.clientSecret = options?.clientSecret || config.clientSecret;
15
22
  }
16
23
 
17
24
  private get headers(): Record<string, string> {
package/src/config.ts CHANGED
@@ -3,4 +3,5 @@ export const config = {
3
3
  clientId: process.env.LYRRA_CLIENT_ID || '',
4
4
  clientSecret: process.env.LYRRA_CLIENT_SECRET || '',
5
5
  eduflowApiUrl: process.env.LYRRA_EDUFLOW_API_URL || 'http://localhost:3001/eduflow',
6
+ frontendUrl: process.env.LYRRA_FRONTEND_URL || (process.env.LYRRA_API_URL ? process.env.LYRRA_API_URL.replace(/\/api$/, '') : 'http://localhost:5173'),
6
7
  };