codingbuddy 0.2.7 → 1.0.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 (37) hide show
  1. package/README.md +38 -1
  2. package/dist/api/mcp.d.ts +2 -0
  3. package/dist/api/mcp.js +92 -0
  4. package/dist/api/mcp.js.map +1 -0
  5. package/dist/src/cli/cli.d.ts +1 -0
  6. package/dist/src/cli/cli.js +15 -0
  7. package/dist/src/cli/cli.js.map +1 -1
  8. package/dist/src/config/config.loader.d.ts +2 -0
  9. package/dist/src/config/config.loader.js +14 -0
  10. package/dist/src/config/config.loader.js.map +1 -1
  11. package/dist/src/main.js +25 -1
  12. package/dist/src/main.js.map +1 -1
  13. package/dist/src/mcp/mcp-serverless.d.ts +27 -0
  14. package/dist/src/mcp/mcp-serverless.js +380 -0
  15. package/dist/src/mcp/mcp-serverless.js.map +1 -0
  16. package/dist/src/mcp/mcp.service.js +3 -1
  17. package/dist/src/mcp/mcp.service.js.map +1 -1
  18. package/dist/src/rules/agent.schema.d.ts +20 -0
  19. package/dist/src/rules/agent.schema.js +82 -0
  20. package/dist/src/rules/agent.schema.js.map +1 -0
  21. package/dist/src/rules/rules.service.js +18 -1
  22. package/dist/src/rules/rules.service.js.map +1 -1
  23. package/dist/src/rules/rules.types.d.ts +8 -5
  24. package/dist/src/shared/error.utils.d.ts +1 -0
  25. package/dist/src/shared/error.utils.js +46 -0
  26. package/dist/src/shared/error.utils.js.map +1 -0
  27. package/dist/src/shared/security.utils.d.ts +1 -0
  28. package/dist/src/shared/security.utils.js +17 -0
  29. package/dist/src/shared/security.utils.js.map +1 -0
  30. package/dist/src/shared/validation.constants.d.ts +11 -0
  31. package/dist/src/shared/validation.constants.js +53 -0
  32. package/dist/src/shared/validation.constants.js.map +1 -0
  33. package/dist/tsconfig.build.tsbuildinfo +1 -1
  34. package/package.json +32 -3
  35. package/dist/vitest.config.d.ts +0 -2
  36. package/dist/vitest.config.js +0 -23
  37. package/dist/vitest.config.js.map +0 -1
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Codingbuddy MCP Server
2
2
 
3
- [![CI](https://github.com/Codingbuddydev/codingbuddy/actions/workflows/dev.yml/badge.svg)](https://github.com/Codingbuddydev/codingbuddy/actions/workflows/dev.yml)
3
+ [![CI](https://github.com/JeremyDev87/codingbuddy/actions/workflows/dev.yml/badge.svg)](https://github.com/JeremyDev87/codingbuddy/actions/workflows/dev.yml)
4
4
 
5
5
  A NestJS-based Model Context Protocol (MCP) server that provides AI coding assistants with project-specific context and rules.
6
6
 
@@ -134,6 +134,43 @@ The server will start in SSE mode, exposing:
134
134
  - `GET /sse`: SSE Endpoint
135
135
  - `POST /messages`: Message Endpoint
136
136
 
137
+ ### Option 5: Vercel Deployment
138
+
139
+ The MCP server can be deployed to Vercel as a serverless function:
140
+
141
+ #### Deploy
142
+
143
+ ```bash
144
+ cd apps/mcp-server
145
+ npx vercel deploy
146
+ ```
147
+
148
+ #### Endpoint
149
+
150
+ - **URL**: `https://your-project.vercel.app/api/mcp`
151
+ - **Method**: POST
152
+ - **Content-Type**: application/json
153
+
154
+ #### Example Request
155
+
156
+ ```bash
157
+ curl -X POST https://your-project.vercel.app/api/mcp \
158
+ -H "Content-Type: application/json" \
159
+ -d '{
160
+ "jsonrpc": "2.0",
161
+ "method": "tools/list",
162
+ "id": 1
163
+ }'
164
+ ```
165
+
166
+ ### Transport Modes
167
+
168
+ | Mode | Use Case | Command |
169
+ |------|----------|---------|
170
+ | Stdio | CLI integration | `yarn start` |
171
+ | SSE | Self-hosted HTTP | `MCP_TRANSPORT=sse yarn start` |
172
+ | Vercel | Serverless HTTPS | `npx vercel deploy` |
173
+
137
174
  ## Environment Variables
138
175
 
139
176
  | Variable | Description | Default |
@@ -0,0 +1,2 @@
1
+ import type { VercelRequest, VercelResponse } from '@vercel/node';
2
+ export default function handler(req: VercelRequest, res: VercelResponse): Promise<void>;
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = handler;
4
+ const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
5
+ const mcp_serverless_1 = require("../src/mcp/mcp-serverless");
6
+ const MAX_BODY_SIZE = 1024 * 1024;
7
+ const ALLOWED_METHODS = ['GET', 'POST', 'DELETE', 'OPTIONS'];
8
+ let mcpService = null;
9
+ function getService() {
10
+ if (!mcpService) {
11
+ mcpService = new mcp_serverless_1.McpServerlessService();
12
+ }
13
+ return mcpService;
14
+ }
15
+ function jsonRpcError(res, code, message, status = 500) {
16
+ res.status(status).json({
17
+ jsonrpc: '2.0',
18
+ error: { code, message },
19
+ id: null,
20
+ });
21
+ }
22
+ async function parseBody(req) {
23
+ if (req.body && typeof req.body === 'object') {
24
+ return req.body;
25
+ }
26
+ const chunks = [];
27
+ let totalSize = 0;
28
+ for await (const chunk of req) {
29
+ totalSize += chunk.length;
30
+ if (totalSize > MAX_BODY_SIZE) {
31
+ throw new Error('PAYLOAD_TOO_LARGE');
32
+ }
33
+ chunks.push(chunk);
34
+ }
35
+ if (chunks.length === 0) {
36
+ return undefined;
37
+ }
38
+ const bodyStr = Buffer.concat(chunks).toString('utf-8');
39
+ return JSON.parse(bodyStr);
40
+ }
41
+ async function handler(req, res) {
42
+ res.setHeader('Access-Control-Allow-Origin', '*');
43
+ res.setHeader('Access-Control-Allow-Methods', ALLOWED_METHODS.join(', '));
44
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type, mcp-session-id');
45
+ if (req.method === 'OPTIONS') {
46
+ res.status(200).end();
47
+ return;
48
+ }
49
+ if (!req.method || !ALLOWED_METHODS.includes(req.method)) {
50
+ return jsonRpcError(res, -32600, 'Method not allowed', 405);
51
+ }
52
+ const contentLength = req.headers['content-length'];
53
+ if (contentLength && parseInt(contentLength, 10) > MAX_BODY_SIZE) {
54
+ return jsonRpcError(res, -32700, 'Request entity too large', 413);
55
+ }
56
+ if (req.method === 'POST') {
57
+ const contentType = req.headers['content-type'] || '';
58
+ if (!contentType.includes('application/json')) {
59
+ return jsonRpcError(res, -32700, 'Unsupported Media Type: expected application/json', 415);
60
+ }
61
+ }
62
+ try {
63
+ let body;
64
+ if (req.method === 'POST') {
65
+ try {
66
+ body = await parseBody(req);
67
+ }
68
+ catch (parseError) {
69
+ if (parseError instanceof Error &&
70
+ parseError.message === 'PAYLOAD_TOO_LARGE') {
71
+ return jsonRpcError(res, -32700, 'Request entity too large', 413);
72
+ }
73
+ console.error('Body parse error:', parseError);
74
+ return jsonRpcError(res, -32700, 'Parse error: invalid JSON', 400);
75
+ }
76
+ }
77
+ const service = getService();
78
+ const server = service.getServer();
79
+ const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
80
+ sessionIdGenerator: undefined,
81
+ enableJsonResponse: true,
82
+ });
83
+ await server.connect(transport);
84
+ await transport.handleRequest(req, res, body);
85
+ }
86
+ catch (error) {
87
+ console.error('MCP handler error:', error);
88
+ const message = error instanceof Error ? error.message : 'Internal server error';
89
+ return jsonRpcError(res, -32603, message);
90
+ }
91
+ }
92
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../api/mcp.ts"],"names":[],"mappings":"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"}
@@ -7,4 +7,5 @@ export interface ParsedArgs {
7
7
  export declare function parseArgs(args: string[]): ParsedArgs;
8
8
  export declare function printUsage(): void;
9
9
  export declare function printVersion(): void;
10
+ export declare function printApiKeyWarning(): void;
10
11
  export declare function main(args?: string[]): Promise<void>;
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.parseArgs = parseArgs;
5
5
  exports.printUsage = printUsage;
6
6
  exports.printVersion = printVersion;
7
+ exports.printApiKeyWarning = printApiKeyWarning;
7
8
  exports.main = main;
8
9
  const init_1 = require("./init");
9
10
  const main_1 = require("../main");
@@ -79,8 +80,22 @@ Environment:
79
80
  function printVersion() {
80
81
  process.stdout.write(`codingbuddy v${VERSION}\n`);
81
82
  }
83
+ function printApiKeyWarning() {
84
+ const warning = `
85
+ ⚠️ Security Warning: API key passed via command line argument.
86
+ This may expose your key in shell history and process lists.
87
+ Consider using the ANTHROPIC_API_KEY environment variable instead:
88
+
89
+ export ANTHROPIC_API_KEY="your-key-here"
90
+ codingbuddy init
91
+ `;
92
+ process.stderr.write(warning);
93
+ }
82
94
  async function main(args = process.argv.slice(2)) {
83
95
  const { command, options } = parseArgs(args);
96
+ if (options.apiKey) {
97
+ printApiKeyWarning();
98
+ }
84
99
  switch (command) {
85
100
  case 'help':
86
101
  printUsage();
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/cli/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/cli/cli.ts"],"names":[],"mappings":"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"}
@@ -18,5 +18,7 @@ export declare function validateAndTransform(raw: unknown, filePath: string): {
18
18
  config: CodingBuddyConfig;
19
19
  warnings: string[];
20
20
  };
21
+ export declare function isJsConfig(filePath: string): boolean;
22
+ export declare function getJsConfigWarning(filePath: string): string;
21
23
  export declare function loadConfig(projectRoot?: string): Promise<ConfigLoadResult>;
22
24
  export declare function hasConfigFile(projectRoot: string): boolean;
@@ -6,6 +6,8 @@ exports.loadJsConfig = loadJsConfig;
6
6
  exports.loadJsonConfig = loadJsonConfig;
7
7
  exports.loadConfigFromFile = loadConfigFromFile;
8
8
  exports.validateAndTransform = validateAndTransform;
9
+ exports.isJsConfig = isJsConfig;
10
+ exports.getJsConfigWarning = getJsConfigWarning;
9
11
  exports.loadConfig = loadConfig;
10
12
  exports.hasConfigFile = hasConfigFile;
11
13
  const fs = require("fs/promises");
@@ -81,6 +83,15 @@ function validateAndTransform(raw, filePath) {
81
83
  warnings: [],
82
84
  };
83
85
  }
86
+ function isJsConfig(filePath) {
87
+ const ext = path.extname(filePath).toLowerCase();
88
+ return ext === '.js' || ext === '.mjs';
89
+ }
90
+ function getJsConfigWarning(filePath) {
91
+ return (`Security notice: Loading JavaScript config file (${path.basename(filePath)}). ` +
92
+ 'JS configs execute code and may pose security risks in untrusted projects. ' +
93
+ 'Consider using codingbuddy.config.json for safer static configuration.');
94
+ }
84
95
  async function loadConfig(projectRoot) {
85
96
  const root = projectRoot ?? process.cwd();
86
97
  const configPath = findConfigFile(root);
@@ -93,6 +104,9 @@ async function loadConfig(projectRoot) {
93
104
  }
94
105
  const raw = await loadConfigFromFile(configPath);
95
106
  const { config, warnings } = validateAndTransform(raw, configPath);
107
+ if (isJsConfig(configPath)) {
108
+ warnings.push(getJsConfigWarning(configPath));
109
+ }
96
110
  return {
97
111
  config,
98
112
  source: configPath,
@@ -1 +1 @@
1
- {"version":3,"file":"config.loader.js","sourceRoot":"","sources":["../../../src/config/config.loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.loader.js","sourceRoot":"","sources":["../../../src/config/config.loader.ts"],"names":[],"mappings":"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"}
package/dist/src/main.js CHANGED
@@ -6,13 +6,37 @@ const core_1 = require("@nestjs/core");
6
6
  const app_module_1 = require("./app.module");
7
7
  const mcp_service_1 = require("./mcp/mcp.service");
8
8
  const common_1 = require("@nestjs/common");
9
+ function parseCorsOrigin(corsOrigin) {
10
+ if (!corsOrigin) {
11
+ return false;
12
+ }
13
+ if (corsOrigin === '*') {
14
+ return true;
15
+ }
16
+ if (corsOrigin.includes(',')) {
17
+ return corsOrigin.split(',').map(o => o.trim());
18
+ }
19
+ return corsOrigin;
20
+ }
9
21
  async function bootstrap() {
10
22
  const logger = new common_1.Logger('Bootstrap');
11
23
  const transportMode = process.env.MCP_TRANSPORT || 'stdio';
12
24
  if (transportMode === 'sse') {
13
- const app = await core_1.NestFactory.create(app_module_1.AppModule);
25
+ const corsOrigin = parseCorsOrigin(process.env.CORS_ORIGIN);
26
+ const app = await core_1.NestFactory.create(app_module_1.AppModule, {
27
+ cors: corsOrigin !== false ? { origin: corsOrigin } : false,
28
+ });
14
29
  const port = process.env.PORT || 3000;
15
30
  await app.listen(port);
31
+ if (corsOrigin === false) {
32
+ logger.warn('SSE mode: CORS disabled (set CORS_ORIGIN to enable)');
33
+ }
34
+ else if (corsOrigin === true) {
35
+ logger.warn('SSE mode: CORS enabled for all origins (*)');
36
+ }
37
+ else {
38
+ logger.log(`SSE mode: CORS enabled for: ${JSON.stringify(corsOrigin)}`);
39
+ }
16
40
  logger.log(`MCP Server running in SSE mode on port ${port}`);
17
41
  }
18
42
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":";;;AAMA,8BAiBC;AAtBD,uCAA2C;AAC3C,6CAAyC;AACzC,mDAA+C;AAC/C,2CAAwC;AAEjC,KAAK,UAAU,SAAS;IAC7B,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC;IAE3D,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;QAE5B,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,sBAAS,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;QACtC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QAEN,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,wBAAwB,CAAC,sBAAS,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,wBAAU,CAAC,CAAC;QACvC,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAGD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,SAAS,EAAE,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":";;;AAgCA,8BA8BC;AA7DD,uCAA2C;AAC3C,6CAAyC;AACzC,mDAA+C;AAC/C,2CAAwC;AAMxC,SAAS,eAAe,CACtB,UAA8B;IAE9B,IAAI,CAAC,UAAU,EAAE,CAAC;QAEhB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;QAEvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAE7B,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAGD,OAAO,UAAU,CAAC;AACpB,CAAC;AAEM,KAAK,UAAU,SAAS;IAC7B,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC;IAE3D,IAAI,aAAa,KAAK,KAAK,EAAE,CAAC;QAE5B,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,sBAAS,EAAE;YAC9C,IAAI,EAAE,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,KAAK;SAC5D,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;QACtC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAGvB,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACrE,CAAC;aAAM,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,+BAA+B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QAEN,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,wBAAwB,CAAC,sBAAS,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,wBAAU,CAAC,CAAC;QACvC,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAGD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,SAAS,EAAE,CAAC;AACd,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare class McpServerlessService {
3
+ private server;
4
+ private rulesDir;
5
+ private projectRoot;
6
+ constructor(rulesDir?: string, projectRoot?: string);
7
+ getServer(): McpServer;
8
+ setRulesDir(rulesDir: string): void;
9
+ setProjectRoot(projectRoot: string): void;
10
+ private findRulesDir;
11
+ private registerTools;
12
+ private registerResources;
13
+ private handleSearchRules;
14
+ private handleGetAgentDetails;
15
+ private handleParseMode;
16
+ private handleGetProjectConfig;
17
+ private handleSuggestConfigUpdates;
18
+ private getRuleContent;
19
+ private listAgents;
20
+ private getAgent;
21
+ private searchRules;
22
+ private parseMode;
23
+ private getRulesForMode;
24
+ private loadProjectSettings;
25
+ private jsonResponse;
26
+ private errorResponse;
27
+ }