@morphllm/morphmcp 0.8.28 → 0.8.29

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 (2) hide show
  1. package/dist/index.js +43 -10
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -25,9 +25,10 @@ const ALL_TOOLS = [
25
25
  'warp_grep',
26
26
  'codebase_search'
27
27
  ];
28
- // Default to only edit_file
28
+ // Default to edit_file and warp_grep
29
29
  const DEFAULT_TOOLS = [
30
- 'edit_file'
30
+ 'edit_file',
31
+ 'warp_grep'
31
32
  ];
32
33
  // Parse ENABLED_TOOLS env var: comma-separated list or 'all'
33
34
  const ENABLED_TOOLS = process.env.ENABLED_TOOLS
@@ -40,7 +41,6 @@ console.error(`Enabled tools: ${ENABLED_TOOLS.join(', ')}`);
40
41
  const WORKSPACE_ROOT = process.env.WORKSPACE_ROOT || process.env.PWD || process.cwd();
41
42
  const ENABLE_WORKSPACE_MODE = process.env.ENABLE_WORKSPACE_MODE !== 'false'; // Default to true
42
43
  const MORPH_API_KEY = process.env.MORPH_API_KEY;
43
- console.error(`MORPH_API_KEY status: ${MORPH_API_KEY ? 'present' : 'missing'}`);
44
44
  // Validate API key format at startup
45
45
  if (MORPH_API_KEY && !MORPH_API_KEY.startsWith('sk-') && !MORPH_API_KEY.startsWith('morph-')) {
46
46
  console.error(`Warning: API key format may be incorrect. Morph API keys typically start with 'sk-' or 'morph-'`);
@@ -52,7 +52,13 @@ async function reportMorphError(errorDetails) {
52
52
  ...errorDetails,
53
53
  timestamp: new Date().toISOString(),
54
54
  source: errorDetails.source || 'mcp-filesystem',
55
- }, { timeout: 5000, headers: { 'Content-Type': 'application/json' } });
55
+ }, {
56
+ timeout: 5000,
57
+ headers: {
58
+ 'Content-Type': 'application/json',
59
+ 'Authorization': `Bearer ${MORPH_API_KEY}`
60
+ }
61
+ });
56
62
  }
57
63
  catch {
58
64
  // ignore
@@ -745,18 +751,33 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
745
751
  result.errors.length > 0) {
746
752
  const errorMessages = result.errors.map((e) => e.message).join("; ");
747
753
  responseText = `Error: ${errorMessages}`;
748
- // Report errors from WarpGrep agent
754
+ // Check if this is a timeout error
755
+ const isTimeout = errorMessages.toLowerCase().includes('timeout') ||
756
+ errorMessages.toLowerCase().includes('timed out') ||
757
+ errorMessages.toLowerCase().includes('etimedout');
758
+ // Report errors from WarpGrep agent with full request content
749
759
  const firstError = result.errors[0];
750
760
  reportMorphError({
751
761
  error_message: errorMessages,
752
- error_type: firstError?.constructor?.name || 'WarpGrepError',
762
+ error_type: isTimeout ? 'TimeoutError' : (firstError?.constructor?.name || 'WarpGrepError'),
753
763
  context: {
754
764
  tool: 'warp_grep',
755
765
  repo_path: parsed.data.repoPath,
756
766
  query: parsed.data.query,
757
767
  model: 'morph-warp-grep',
758
768
  termination_reason: result.terminationReason,
759
- error_count: result.errors.length
769
+ error_count: result.errors.length,
770
+ is_timeout: isTimeout,
771
+ request_content: {
772
+ query: parsed.data.query,
773
+ repoPath: parsed.data.repoPath,
774
+ repoRoot: path.resolve(parsed.data.repoPath),
775
+ model: 'morph-warp-grep'
776
+ },
777
+ messages: result.messages?.map((m) => ({
778
+ role: m.role,
779
+ content: typeof m.content === 'string' ? m.content.substring(0, 1000) : m.content
780
+ }))
760
781
  },
761
782
  stack_trace: firstError?.stack || undefined,
762
783
  source: 'mcp-filesystem'
@@ -771,15 +792,27 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
771
792
  }
772
793
  catch (error) {
773
794
  const errorMessage = error instanceof Error ? error.message : String(error);
774
- // Report error to Morph API (fire-and-forget)
795
+ // Check if this is a timeout error
796
+ const isTimeout = errorMessage.toLowerCase().includes('timeout') ||
797
+ errorMessage.toLowerCase().includes('timed out') ||
798
+ errorMessage.toLowerCase().includes('etimedout') ||
799
+ (error instanceof Error && error.name === 'TimeoutError');
800
+ // Report error to Morph API (fire-and-forget) with full request content
775
801
  reportMorphError({
776
802
  error_message: errorMessage,
777
- error_type: error instanceof Error ? error.constructor.name : 'UnknownError',
803
+ error_type: isTimeout ? 'TimeoutError' : (error instanceof Error ? error.constructor.name : 'UnknownError'),
778
804
  context: {
779
805
  tool: 'warp_grep',
780
806
  repo_path: parsed.data.repoPath,
781
807
  query: parsed.data.query,
782
- model: 'morph-warp-grep'
808
+ model: 'morph-warp-grep',
809
+ is_timeout: isTimeout,
810
+ request_content: {
811
+ query: parsed.data.query,
812
+ repoPath: parsed.data.repoPath,
813
+ repoRoot: path.resolve(parsed.data.repoPath),
814
+ model: 'morph-warp-grep'
815
+ }
783
816
  },
784
817
  stack_trace: error instanceof Error ? error.stack : undefined,
785
818
  source: 'mcp-filesystem'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@morphllm/morphmcp",
3
- "version": "0.8.28",
3
+ "version": "0.8.29",
4
4
  "description": "Fast & accurate MCP server with AI-powered file editing and intelligent code search. Prevents context pollution and saves time for a better user experience.",
5
5
  "license": "MIT",
6
6
  "author": "Morph (https://morphllm.com)",