@doccler/mcp-server 1.0.0

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.
package/README.md ADDED
@@ -0,0 +1,200 @@
1
+ # Doccler MCP Server
2
+
3
+ 🚀 **Connect your IDE to Doccler** - Use AI-powered documentation directly from your development environment.
4
+
5
+ ## What is MCP?
6
+
7
+ The Model Context Protocol (MCP) is an open standard that allows AI assistants (like Claude, Cursor, VS Code with AI extensions) to connect to external tools and data sources. Doccler's MCP server enables you to:
8
+
9
+ 1. **Query your documentation** as a single source of truth
10
+ 2. **Create documentation** directly from your IDE
11
+ 3. **Search documentation** with semantic search
12
+ 4. **Generate documentation** from code using AI
13
+
14
+ ## Installation
15
+
16
+ ### Prerequisites
17
+
18
+ - Node.js 18 or higher
19
+ - npm or yarn
20
+ - A Doccler account with API access
21
+
22
+ ### Install Dependencies
23
+
24
+ ```bash
25
+ cd mcp-server
26
+ npm install
27
+ ```
28
+
29
+ ### Build the Server
30
+
31
+ ```bash
32
+ npm run build
33
+ ```
34
+
35
+ ## Configuration
36
+
37
+ ### 1. Get Your Doccler API Key
38
+
39
+ 1. Log in to [Doccler](https://doccler.com)
40
+ 2. Go to **Settings** → **API Keys**
41
+ 3. Generate a new API key
42
+
43
+ ### 2. Configure Your IDE
44
+
45
+ #### For Antigravity (VS Code based)
46
+
47
+ Add to your `~/.antigravity/settings.json`:
48
+
49
+ ```json
50
+ {
51
+ "mcp": {
52
+ "servers": {
53
+ "doccler": {
54
+ "command": "node",
55
+ "args": ["/path/to/docs-platform/mcp-server/dist/index.js"],
56
+ "env": {
57
+ "DOCCLER_API_KEY": "your-api-key-here",
58
+ "DOCCLER_API_URL": "https://doccler.com/api"
59
+ }
60
+ }
61
+ }
62
+ }
63
+ }
64
+ ```
65
+
66
+ #### For Cursor
67
+
68
+ Add to your `~/.cursor/mcp.json`:
69
+
70
+ ```json
71
+ {
72
+ "mcpServers": {
73
+ "doccler": {
74
+ "command": "node",
75
+ "args": ["/path/to/docs-platform/mcp-server/dist/index.js"],
76
+ "env": {
77
+ "DOCCLER_API_KEY": "your-api-key-here",
78
+ "DOCCLER_API_URL": "https://doccler.com/api"
79
+ }
80
+ }
81
+ }
82
+ }
83
+ ```
84
+
85
+ #### For Claude Desktop
86
+
87
+ Add to your `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
88
+
89
+ ```json
90
+ {
91
+ "mcpServers": {
92
+ "doccler": {
93
+ "command": "node",
94
+ "args": ["/path/to/docs-platform/mcp-server/dist/index.js"],
95
+ "env": {
96
+ "DOCCLER_API_KEY": "your-api-key-here",
97
+ "DOCCLER_API_URL": "https://doccler.com/api"
98
+ }
99
+ }
100
+ }
101
+ }
102
+ ```
103
+
104
+ #### For TRAE
105
+
106
+ Add to your TRAE MCP configuration:
107
+
108
+ ```json
109
+ {
110
+ "servers": {
111
+ "doccler": {
112
+ "command": "node",
113
+ "args": ["/path/to/docs-platform/mcp-server/dist/index.js"],
114
+ "env": {
115
+ "DOCCLER_API_KEY": "your-api-key-here",
116
+ "DOCCLER_API_URL": "https://doccler.com/api"
117
+ }
118
+ }
119
+ }
120
+ }
121
+ ```
122
+
123
+ ## Available Tools
124
+
125
+ ### 🔧 hello_doccler
126
+
127
+ Verify your connection to Doccler.
128
+
129
+ ```
130
+ Use: "Hello Doccler" or "Test Doccler connection"
131
+ ```
132
+
133
+ ### 🔍 search_docs
134
+
135
+ Search your documentation.
136
+
137
+ ```
138
+ Use: "Search my documentation for authentication"
139
+ "Find docs about JWT tokens"
140
+ ```
141
+
142
+ ### 📝 create_doc
143
+
144
+ Create new documentation.
145
+
146
+ ```
147
+ Use: "Create documentation titled 'API Guide' with content..."
148
+ ```
149
+
150
+ ### 🤖 generate_doc
151
+
152
+ Generate documentation from code using AI.
153
+
154
+ ```
155
+ Use: "Generate documentation for this code: [paste your code]"
156
+ "Analyze and document this function"
157
+ ```
158
+
159
+ ## Development
160
+
161
+ ### Run in Development Mode
162
+
163
+ ```bash
164
+ npm run dev
165
+ ```
166
+
167
+ ### Test with MCP Inspector
168
+
169
+ ```bash
170
+ npm run inspect
171
+ ```
172
+
173
+ This opens an interactive inspector to test your tools and resources.
174
+
175
+ ## Environment Variables
176
+
177
+ | Variable | Description | Default |
178
+ |----------|-------------|---------|
179
+ | `DOCCLER_API_KEY` | Your Doccler API key | (required) |
180
+ | `DOCCLER_API_URL` | Doccler API base URL | `https://doccler.com/api` |
181
+
182
+ ## Troubleshooting
183
+
184
+ ### "API Key not configured"
185
+
186
+ Make sure `DOCCLER_API_KEY` is set in your IDE's MCP configuration.
187
+
188
+ ### "Connection failed"
189
+
190
+ 1. Check that the server is built: `npm run build`
191
+ 2. Verify the path to `dist/index.js` is correct
192
+ 3. Ensure Node.js 18+ is installed
193
+
194
+ ### Server logs
195
+
196
+ Look for logs in your IDE's output panel, usually under "MCP" or "Extensions".
197
+
198
+ ## License
199
+
200
+ MIT
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Doccler MCP Server
4
+ *
5
+ * This server allows IDEs (VS Code, Cursor, TRAE, etc.) to connect to Doccler
6
+ * and interact with documentation in two main ways:
7
+ *
8
+ * 1. Query documentation as a single source of truth for development
9
+ * 2. Create, search, and generate documentation via AI
10
+ *
11
+ * Transport: stdio (standard for IDE integrations)
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG"}
package/dist/index.js ADDED
@@ -0,0 +1,504 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Doccler MCP Server
4
+ *
5
+ * This server allows IDEs (VS Code, Cursor, TRAE, etc.) to connect to Doccler
6
+ * and interact with documentation in two main ways:
7
+ *
8
+ * 1. Query documentation as a single source of truth for development
9
+ * 2. Create, search, and generate documentation via AI
10
+ *
11
+ * Transport: stdio (standard for IDE integrations)
12
+ */
13
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
14
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
15
+ import { z } from 'zod';
16
+ // Server info
17
+ const SERVER_NAME = 'doccler-mcp-server';
18
+ const SERVER_VERSION = '1.0.0';
19
+ // API Configuration - will be overridden by environment variables
20
+ const DOCCLER_API_BASE = process.env.DOCCLER_API_URL || 'https://doccler.com/api';
21
+ const DOCCLER_API_KEY = process.env.DOCCLER_API_KEY || '';
22
+ /**
23
+ * Helper to make authenticated API requests to Doccler
24
+ */
25
+ async function docclerRequest(endpoint, options = {}) {
26
+ const url = `${DOCCLER_API_BASE}${endpoint}`;
27
+ return fetch(url, {
28
+ ...options,
29
+ headers: {
30
+ 'Content-Type': 'application/json',
31
+ 'Authorization': `Bearer ${DOCCLER_API_KEY}`,
32
+ ...options.headers,
33
+ },
34
+ });
35
+ }
36
+ // Extract base URL for public links (remove /api)
37
+ const DOCCLER_BASE_URL = DOCCLER_API_BASE.replace(/\/api$/, '');
38
+ /**
39
+ * Build a public document URL
40
+ * Format: https://doccler.com/docs/{username}/{slug}
41
+ * Since we don't know the username, we use the dashboard URL
42
+ */
43
+ function getDocumentUrl(slug) {
44
+ return `${DOCCLER_BASE_URL}/pt/editor/${slug}`;
45
+ }
46
+ /**
47
+ * Build a public docs URL (for published docs)
48
+ */
49
+ function getPublicDocUrl(slug, username) {
50
+ if (username) {
51
+ return `${DOCCLER_BASE_URL}/pt/docs/${username}/${slug}`;
52
+ }
53
+ return `${DOCCLER_BASE_URL}/pt/editor/${slug}`;
54
+ }
55
+ /**
56
+ * Standard error response builder
57
+ */
58
+ function errorResponse(message, details) {
59
+ const text = details
60
+ ? `❌ ${message}\n\n📋 Detalhes: ${details}`
61
+ : `❌ ${message}`;
62
+ return {
63
+ content: [{ type: 'text', text }],
64
+ };
65
+ }
66
+ /**
67
+ * Standard success response builder
68
+ */
69
+ function successResponse(message) {
70
+ return {
71
+ content: [{ type: 'text', text: message }],
72
+ };
73
+ }
74
+ /**
75
+ * Initialize and run the MCP server
76
+ */
77
+ async function main() {
78
+ // Create MCP Server instance
79
+ const server = new McpServer({
80
+ name: SERVER_NAME,
81
+ version: SERVER_VERSION,
82
+ });
83
+ // ============================================
84
+ // TOOL: hello_doccler
85
+ // A simple hello world tool to verify the connection
86
+ // ============================================
87
+ server.tool('hello_doccler', 'Say hello to Doccler and verify the connection is working', {
88
+ name: z.string().optional().describe('Optional name to personalize the greeting'),
89
+ }, async (args) => {
90
+ const name = args.name || 'Developer';
91
+ const timestamp = new Date().toISOString();
92
+ const greeting = [
93
+ `👋 Hello, ${name}!`,
94
+ '',
95
+ '🚀 Welcome to Doccler MCP Server!',
96
+ '',
97
+ 'I am your documentation assistant. I can help you:',
98
+ '• Search your documentation',
99
+ '• Create new documentation',
100
+ '• Generate documentation with AI',
101
+ '',
102
+ `📡 Server: ${SERVER_NAME} v${SERVER_VERSION}`,
103
+ `🕐 Time: ${timestamp}`,
104
+ `🔗 API: ${DOCCLER_API_BASE}`,
105
+ '',
106
+ DOCCLER_API_KEY ? '✅ API Key configured' : '⚠️ No API Key configured - set DOCCLER_API_KEY environment variable',
107
+ ].join('\n');
108
+ return {
109
+ content: [
110
+ {
111
+ type: 'text',
112
+ text: greeting,
113
+ },
114
+ ],
115
+ };
116
+ });
117
+ // ============================================
118
+ // TOOL: search_docs
119
+ // Search documentation by query
120
+ // ============================================
121
+ server.tool('search_docs', 'Search your Doccler documentation by keyword or semantic query', {
122
+ query: z.string().describe('Search query to find relevant documentation'),
123
+ limit: z.number().optional().default(5).describe('Maximum number of results to return'),
124
+ }, async (args) => {
125
+ if (!DOCCLER_API_KEY) {
126
+ return {
127
+ content: [
128
+ {
129
+ type: 'text',
130
+ text: '❌ Error: DOCCLER_API_KEY not configured. Please set the environment variable.',
131
+ },
132
+ ],
133
+ };
134
+ }
135
+ try {
136
+ const response = await docclerRequest(`/documents/search?q=${encodeURIComponent(args.query)}&limit=${args.limit}`);
137
+ if (!response.ok) {
138
+ throw new Error(`API Error: ${response.status} ${response.statusText}`);
139
+ }
140
+ const data = await response.json();
141
+ if (!data.documents || data.documents.length === 0) {
142
+ return {
143
+ content: [
144
+ {
145
+ type: 'text',
146
+ text: `🔍 No documentation found for: "${args.query}"`,
147
+ },
148
+ ],
149
+ };
150
+ }
151
+ const results = data.documents.map((doc, i) => `${i + 1}. **${doc.title}**\n Slug: ${doc.slug}\n Preview: ${doc.content?.slice(0, 150)}...`).join('\n\n');
152
+ return {
153
+ content: [
154
+ {
155
+ type: 'text',
156
+ text: `🔍 Found ${data.documents.length} results for "${args.query}":\n\n${results}`,
157
+ },
158
+ ],
159
+ };
160
+ }
161
+ catch (error) {
162
+ return {
163
+ content: [
164
+ {
165
+ type: 'text',
166
+ text: `❌ Error searching documentation: ${error instanceof Error ? error.message : 'Unknown error'}`,
167
+ },
168
+ ],
169
+ };
170
+ }
171
+ });
172
+ // ============================================
173
+ // TOOL: create_doc
174
+ // Create or update documentation
175
+ // ============================================
176
+ server.tool('create_doc', 'Create new documentation in Doccler. Use list_spaces first to see available spaces.', {
177
+ title: z.string().describe('Title of the documentation'),
178
+ content: z.string().describe('Content in Markdown format'),
179
+ space: z.string().optional().describe('Space/category to organize the doc (e.g., "API", "Guides", "Setup"). Leave empty for uncategorized.'),
180
+ published: z.boolean().optional().default(false).describe('Whether to publish immediately'),
181
+ }, async (args) => {
182
+ if (!DOCCLER_API_KEY) {
183
+ return errorResponse('DOCCLER_API_KEY não configurada', 'Configure a variável de ambiente DOCCLER_API_KEY na sua IDE.');
184
+ }
185
+ try {
186
+ // First, get existing spaces for context
187
+ let availableSpaces = [];
188
+ try {
189
+ const spacesResponse = await docclerRequest('/documents');
190
+ if (spacesResponse.ok) {
191
+ const spacesData = await spacesResponse.json();
192
+ const spaces = new Set();
193
+ spacesData.documents?.forEach(doc => {
194
+ const docAny = doc;
195
+ if (docAny.space) {
196
+ spaces.add(docAny.space);
197
+ }
198
+ });
199
+ availableSpaces = Array.from(spaces).slice(0, 5);
200
+ }
201
+ }
202
+ catch {
203
+ // Ignore errors fetching spaces
204
+ }
205
+ const response = await docclerRequest('/documents', {
206
+ method: 'POST',
207
+ body: JSON.stringify({
208
+ title: args.title,
209
+ markdown: args.content,
210
+ content: args.content,
211
+ space: args.space || null,
212
+ published: args.published,
213
+ }),
214
+ });
215
+ if (!response.ok) {
216
+ const errorData = await response.json().catch(() => ({}));
217
+ throw new Error(errorData.error || `API Error: ${response.status}`);
218
+ }
219
+ const data = await response.json();
220
+ const editorUrl = getDocumentUrl(data.slug);
221
+ const responseLines = [
222
+ `✅ Documentação criada com sucesso!`,
223
+ '',
224
+ `📄 Título: ${args.title}`,
225
+ `🔗 Slug: ${data.slug}`,
226
+ args.space ? `📁 Espaço: ${args.space}` : '',
227
+ `📊 Status: ${args.published ? '🟢 Publicado' : '🟡 Rascunho'}`,
228
+ '',
229
+ `📝 Editar: ${editorUrl}`,
230
+ args.published ? `🌐 Ver publicado: ${DOCCLER_BASE_URL}/pt/docs/[username]/${data.slug}` : '',
231
+ ];
232
+ // Add space suggestions if doc was created without a space
233
+ if (!args.space && availableSpaces.length > 0) {
234
+ responseLines.push('');
235
+ responseLines.push('💡 Dica: Você pode organizar este documento em um espaço.');
236
+ responseLines.push(`📂 Espaços disponíveis: ${availableSpaces.join(', ')}`);
237
+ }
238
+ return successResponse(responseLines.filter(Boolean).join('\n'));
239
+ }
240
+ catch (error) {
241
+ return errorResponse('Erro ao criar documentação', error instanceof Error ? error.message : 'Erro desconhecido');
242
+ }
243
+ });
244
+ // ============================================
245
+ // TOOL: generate_doc
246
+ // Generate documentation from code using AI
247
+ // ============================================
248
+ server.tool('generate_doc', 'Analyze code and generate documentation using AI', {
249
+ code: z.string().describe('The code to analyze and document'),
250
+ language: z.string().optional().describe('Programming language of the code'),
251
+ style: z.enum(['technical', 'tutorial', 'reference']).optional().default('technical').describe('Documentation style'),
252
+ }, async (args) => {
253
+ if (!DOCCLER_API_KEY) {
254
+ return errorResponse('DOCCLER_API_KEY não configurada', 'Configure a variável de ambiente na sua IDE.');
255
+ }
256
+ try {
257
+ const response = await docclerRequest('/ai/generate-doc', {
258
+ method: 'POST',
259
+ body: JSON.stringify({
260
+ code: args.code,
261
+ language: args.language,
262
+ style: args.style,
263
+ }),
264
+ });
265
+ if (!response.ok) {
266
+ const errorData = await response.json().catch(() => ({}));
267
+ throw new Error(errorData.error || `API Error: ${response.status}`);
268
+ }
269
+ const data = await response.json();
270
+ const documentation = data.documentation || data.content || '';
271
+ return successResponse([
272
+ `📝 Documentação Gerada (estilo ${args.style}):`,
273
+ '',
274
+ documentation,
275
+ '',
276
+ '---',
277
+ '💡 Dica: Use a ferramenta create_doc para salvar esta documentação no Doccler.',
278
+ ].join('\n'));
279
+ }
280
+ catch (error) {
281
+ return errorResponse('Erro ao gerar documentação', error instanceof Error ? error.message : 'Erro desconhecido');
282
+ }
283
+ });
284
+ // ============================================
285
+ // TOOL: publish_doc
286
+ // Publish or unpublish a document
287
+ // ============================================
288
+ server.tool('publish_doc', 'Publish or unpublish a Doccler document', {
289
+ slug: z.string().describe('The slug (URL identifier) of the document'),
290
+ publish: z.boolean().describe('true to publish, false to unpublish'),
291
+ }, async (args) => {
292
+ if (!DOCCLER_API_KEY) {
293
+ return errorResponse('DOCCLER_API_KEY não configurada', 'Configure a variável de ambiente na sua IDE.');
294
+ }
295
+ try {
296
+ // First, get the document to find its ID
297
+ const searchResponse = await docclerRequest(`/documents/search?q=${encodeURIComponent(args.slug)}&limit=1`);
298
+ if (!searchResponse.ok) {
299
+ throw new Error('Documento não encontrado');
300
+ }
301
+ const searchData = await searchResponse.json();
302
+ const doc = searchData.documents?.find(d => d.slug === args.slug);
303
+ if (!doc) {
304
+ return errorResponse('Documento não encontrado', `Nenhum documento com slug "${args.slug}" foi encontrado.`);
305
+ }
306
+ // Update the document's published status
307
+ const updateResponse = await docclerRequest(`/documents/${doc.id}`, {
308
+ method: 'PUT',
309
+ body: JSON.stringify({ published: args.publish }),
310
+ });
311
+ if (!updateResponse.ok) {
312
+ const errorData = await updateResponse.json().catch(() => ({}));
313
+ throw new Error(errorData.error || 'Erro ao atualizar documento');
314
+ }
315
+ const status = args.publish ? '🟢 Publicado' : '🟡 Rascunho';
316
+ const action = args.publish ? 'publicado' : 'despublicado';
317
+ return successResponse([
318
+ `✅ Documento ${action} com sucesso!`,
319
+ '',
320
+ `📄 Título: ${doc.title}`,
321
+ `🔗 Slug: ${doc.slug}`,
322
+ `📊 Novo status: ${status}`,
323
+ '',
324
+ `📝 Editar: ${getDocumentUrl(doc.slug)}`,
325
+ ].join('\n'));
326
+ }
327
+ catch (error) {
328
+ return errorResponse('Erro ao alterar status do documento', error instanceof Error ? error.message : 'Erro desconhecido');
329
+ }
330
+ });
331
+ // ============================================
332
+ // TOOL: list_spaces
333
+ // List all spaces (document categories)
334
+ // ============================================
335
+ server.tool('list_spaces', 'List all available spaces (document categories) in Doccler', {}, async () => {
336
+ if (!DOCCLER_API_KEY) {
337
+ return errorResponse('DOCCLER_API_KEY não configurada', 'Configure a variável de ambiente na sua IDE.');
338
+ }
339
+ try {
340
+ const response = await docclerRequest('/documents');
341
+ if (!response.ok) {
342
+ throw new Error(`API Error: ${response.status}`);
343
+ }
344
+ const data = await response.json();
345
+ // Extract unique spaces from documents
346
+ const spaces = new Set();
347
+ data.documents?.forEach(doc => {
348
+ const docAny = doc;
349
+ if (docAny.space) {
350
+ spaces.add(docAny.space);
351
+ }
352
+ });
353
+ if (spaces.size === 0) {
354
+ return successResponse([
355
+ '📁 Nenhum espaço encontrado.',
356
+ '',
357
+ 'Os espaços são criados automaticamente quando você atribui um documento a um espaço.',
358
+ 'Use a ferramenta create_doc com o parâmetro space para criar um novo espaço.',
359
+ ].join('\n'));
360
+ }
361
+ const spaceList = Array.from(spaces)
362
+ .map(s => `📂 ${s}`)
363
+ .join('\n');
364
+ return successResponse([
365
+ `📁 Espaços Disponíveis (${spaces.size}):`,
366
+ '',
367
+ spaceList,
368
+ ].join('\n'));
369
+ }
370
+ catch (error) {
371
+ return errorResponse('Erro ao listar espaços', error instanceof Error ? error.message : 'Erro desconhecido');
372
+ }
373
+ });
374
+ // ============================================
375
+ // TOOL: get_doc
376
+ // Get a specific document by slug
377
+ // ============================================
378
+ server.tool('get_doc', 'Get the content of a specific Doccler document', {
379
+ slug: z.string().describe('The slug (URL identifier) of the document'),
380
+ }, async (args) => {
381
+ if (!DOCCLER_API_KEY) {
382
+ return errorResponse('DOCCLER_API_KEY não configurada', 'Configure a variável de ambiente na sua IDE.');
383
+ }
384
+ try {
385
+ const response = await docclerRequest(`/documents/search?q=${encodeURIComponent(args.slug)}&limit=10`);
386
+ if (!response.ok) {
387
+ throw new Error(`API Error: ${response.status}`);
388
+ }
389
+ const data = await response.json();
390
+ const doc = data.documents?.find(d => d.slug === args.slug);
391
+ if (!doc) {
392
+ return errorResponse('Documento não encontrado', `Nenhum documento com slug "${args.slug}" foi encontrado.`);
393
+ }
394
+ const docAny = doc;
395
+ const content = doc.markdown || doc.content || '(Documento sem conteúdo)';
396
+ return successResponse([
397
+ `📄 ${doc.title}`,
398
+ '',
399
+ `🔗 Slug: ${doc.slug}`,
400
+ `📊 Status: ${doc.published ? '🟢 Publicado' : '🟡 Rascunho'}`,
401
+ docAny.space ? `📁 Espaço: ${docAny.space}` : '',
402
+ `📝 Última atualização: ${new Date(doc.updated_at).toLocaleString('pt-BR')}`,
403
+ '',
404
+ '---',
405
+ '',
406
+ content,
407
+ '',
408
+ '---',
409
+ `📝 Editar: ${getDocumentUrl(doc.slug)}`,
410
+ ].filter(Boolean).join('\n'));
411
+ }
412
+ catch (error) {
413
+ return errorResponse('Erro ao buscar documento', error instanceof Error ? error.message : 'Erro desconhecido');
414
+ }
415
+ });
416
+ // ============================================
417
+ // RESOURCE: docs://list
418
+ // List all available documentation
419
+ // ============================================
420
+ server.resource('docs://list', 'List all your Doccler documentation', async (uri) => {
421
+ if (!DOCCLER_API_KEY) {
422
+ return {
423
+ contents: [
424
+ {
425
+ uri: uri.href,
426
+ mimeType: 'text/plain',
427
+ text: 'Error: DOCCLER_API_KEY not configured',
428
+ },
429
+ ],
430
+ };
431
+ }
432
+ try {
433
+ const response = await docclerRequest('/documents');
434
+ if (!response.ok) {
435
+ throw new Error(`API Error: ${response.status}`);
436
+ }
437
+ const data = await response.json();
438
+ const docList = data.documents?.map((doc) => `- ${doc.title} (${doc.slug}) - ${doc.published ? 'Published' : 'Draft'}`).join('\n') || 'No documents found';
439
+ return {
440
+ contents: [
441
+ {
442
+ uri: uri.href,
443
+ mimeType: 'text/plain',
444
+ text: `📚 Your Doccler Documentation:\n\n${docList}`,
445
+ },
446
+ ],
447
+ };
448
+ }
449
+ catch (error) {
450
+ return {
451
+ contents: [
452
+ {
453
+ uri: uri.href,
454
+ mimeType: 'text/plain',
455
+ text: `Error: ${error instanceof Error ? error.message : 'Unknown error'}`,
456
+ },
457
+ ],
458
+ };
459
+ }
460
+ });
461
+ // ============================================
462
+ // PROMPT: document_code
463
+ // Pre-built prompt for documenting code
464
+ // ============================================
465
+ server.prompt('document_code', 'Generate comprehensive documentation for code', {
466
+ code: z.string().describe('The code to document'),
467
+ language: z.string().optional().describe('Programming language'),
468
+ }, async (args) => {
469
+ return {
470
+ messages: [
471
+ {
472
+ role: 'user',
473
+ content: {
474
+ type: 'text',
475
+ text: [
476
+ 'Please analyze and document the following code:',
477
+ '',
478
+ `\`\`\`${args.language || ''}`,
479
+ args.code,
480
+ '```',
481
+ '',
482
+ 'Generate comprehensive documentation that includes:',
483
+ '1. Overview of what the code does',
484
+ '2. Function/method descriptions with parameters and return values',
485
+ '3. Usage examples',
486
+ '4. Any important notes or warnings',
487
+ ].join('\n'),
488
+ },
489
+ },
490
+ ],
491
+ };
492
+ });
493
+ // Connect transport and start server
494
+ const transport = new StdioServerTransport();
495
+ console.error(`[${SERVER_NAME}] Starting server v${SERVER_VERSION}...`);
496
+ await server.connect(transport);
497
+ console.error(`[${SERVER_NAME}] Server connected and ready!`);
498
+ }
499
+ // Run the server
500
+ main().catch((error) => {
501
+ console.error('Fatal error:', error);
502
+ process.exit(1);
503
+ });
504
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@doccler/mcp-server",
3
+ "version": "1.0.0",
4
+ "description": "Doccler MCP Server - Connect your IDE to your documentation platform",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "doccler-mcp": "./dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "dev": "tsx src/index.ts",
17
+ "start": "node dist/index.js",
18
+ "inspect": "npx @modelcontextprotocol/inspector node dist/index.js",
19
+ "prepublishOnly": "npm run build"
20
+ },
21
+ "keywords": [
22
+ "mcp",
23
+ "model-context-protocol",
24
+ "doccler",
25
+ "documentation",
26
+ "ai",
27
+ "ide",
28
+ "cursor",
29
+ "vscode",
30
+ "claude"
31
+ ],
32
+ "author": "Doccler <hello@doccler.com>",
33
+ "license": "MIT",
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "https://github.com/doccler/mcp-server"
37
+ },
38
+ "homepage": "https://doccler.com",
39
+ "bugs": {
40
+ "url": "https://github.com/doccler/mcp-server/issues"
41
+ },
42
+ "dependencies": {
43
+ "@modelcontextprotocol/sdk": "^1.0.0",
44
+ "zod": "^3.25.0"
45
+ },
46
+ "devDependencies": {
47
+ "@types/node": "^20.0.0",
48
+ "tsx": "^4.19.0",
49
+ "typescript": "^5.0.0"
50
+ },
51
+ "engines": {
52
+ "node": ">=18.0.0"
53
+ },
54
+ "publishConfig": {
55
+ "access": "public"
56
+ }
57
+ }