codex-review-mcp 2.3.8 → 2.4.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.
@@ -86,11 +86,11 @@ server.registerTool('perform_code_review', {
86
86
  maxTokens: input.maxTokens,
87
87
  };
88
88
  const onProgress = async (message, progress, total) => {
89
- // Only send progress notifications if we have an explicit progress token
90
- // Note: Do NOT fall back to requestId - it's a different thing in MCP protocol
89
+ // Only send progress notifications if we have a valid string token (like toolu_xxx)
90
+ // Numeric tokens cause "unknown token" errors in the MCP client
91
91
  const progressToken = extra?._meta?.progressToken;
92
- if (progressToken === undefined || progressToken === null) {
93
- // Skip progress notifications if no explicit token provided
92
+ if (!progressToken || typeof progressToken !== 'string') {
93
+ // Skip progress notifications if no valid string token
94
94
  return;
95
95
  }
96
96
  await server.server.notification({
@@ -50,11 +50,11 @@ describe('MCP Server Integration Tests', () => {
50
50
  },
51
51
  }, async (input, extra) => {
52
52
  const onProgress = async (message, progress, total) => {
53
- // Only send progress notifications if we have an explicit progress token
54
- // Note: Do NOT fall back to requestId - it's a different thing in MCP protocol
53
+ // Only send progress notifications if we have a valid string token (like toolu_xxx)
54
+ // Numeric tokens cause "unknown token" errors in the MCP client
55
55
  const progressToken = extra?._meta?.progressToken;
56
- if (progressToken === undefined || progressToken === null) {
57
- // Skip progress notifications if no explicit token provided
56
+ if (!progressToken || typeof progressToken !== 'string') {
57
+ // Skip progress notifications if no valid string token
58
58
  return;
59
59
  }
60
60
  await server.server.notification({
@@ -37,16 +37,20 @@ export async function performCodeReview(input, onProgress) {
37
37
  : shouldSkip
38
38
  ? ''
39
39
  : await gatherContext(input.workspaceDir);
40
- // Debug: Log what context was gathered (to stderr for MCP logs)
41
- console.error(`[codex-review-mcp] Context gathered: ${context.length} chars`);
40
+ // Log context gathering results (informational, not errors!)
42
41
  const hasCursorRules = context.includes('.cursor/rules');
43
- console.error(`[codex-review-mcp] Contains .cursor/rules: ${hasCursorRules}`);
44
42
  if (hasCursorRules) {
45
43
  const cursorFiles = (context.match(/<!-- \.cursor\/rules\/[^>]+ -->/g) || []);
46
- console.error(`[codex-review-mcp] Cursor rules files: ${cursorFiles.join(', ')}`);
44
+ console.error(`[codex-review-mcp] Context: ${context.length} chars with .cursor/rules ${cursorFiles.map(f => f.replace('<!-- ', '').replace(' -->', '')).join(', ')}`);
45
+ }
46
+ else if (context.length > 0) {
47
+ console.error(`[codex-review-mcp] Context: ${context.length} chars from package.json, tsconfig.json, etc. (no .cursor/rules in repo)`);
48
+ }
49
+ else {
50
+ console.error(`[codex-review-mcp] No project context found (generic review mode)`);
47
51
  }
48
52
  // Also use debugLog for persistent logging
49
- await debugLog(`Context gathered: ${context.length} chars, .cursor/rules: ${hasCursorRules}`);
53
+ await debugLog(`Context: ${context.length} chars, .cursor/rules: ${hasCursorRules}`);
50
54
  // Build expert prompt
51
55
  await onProgress?.('Building expert prompt…', 50, 100);
52
56
  const isStaticReview = input.contentType === 'code';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-review-mcp",
3
- "version": "2.3.8",
3
+ "version": "2.4.0",
4
4
  "main": "index.js",
5
5
  "scripts": {
6
6
  "build": "tsc",