@jaypie/mcp 0.7.9 → 0.7.11
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/dist/suites/aws/aws.d.ts +10 -0
- package/dist/suites/aws/aws.js +42 -1
- package/dist/suites/aws/aws.js.map +1 -1
- package/dist/suites/aws/help.md +52 -7
- package/dist/suites/aws/index.d.ts +2 -36
- package/dist/suites/aws/index.js +146 -7
- package/dist/suites/aws/index.js.map +1 -1
- package/dist/suites/datadog/datadog.d.ts +15 -0
- package/dist/suites/datadog/datadog.js +25 -1
- package/dist/suites/datadog/datadog.js.map +1 -1
- package/dist/suites/datadog/help.md +37 -5
- package/dist/suites/datadog/index.d.ts +1 -23
- package/dist/suites/datadog/index.js +139 -43
- package/dist/suites/datadog/index.js.map +1 -1
- package/dist/suites/docs/index.js +60 -4
- package/dist/suites/docs/index.js.map +1 -1
- package/dist/suites/llm/help.md +21 -3
- package/dist/suites/llm/index.d.ts +1 -10
- package/dist/suites/llm/index.js +21 -7
- package/dist/suites/llm/index.js.map +1 -1
- package/dist/suites/llm/llm.d.ts +18 -0
- package/dist/suites/llm/llm.js +28 -1
- package/dist/suites/llm/llm.js.map +1 -1
- package/package.json +1 -1
- package/release-notes/mcp/0.7.10.md +45 -0
- package/release-notes/mcp/0.7.11.md +12 -0
- package/skills/tools-aws.md +65 -23
- package/skills/tools-datadog.md +71 -39
- package/skills/tools-dynamodb.md +27 -16
- package/skills/tools-llm.md +30 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/suites/llm/index.ts"],"sourcesContent":["/**\n * LLM Suite - Unified LLM debugging and inspection\n */\nimport { fabricService } from \"@jaypie/fabric\";\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { debugLlmCall, type LlmProvider } from \"./llm.js\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\n// Silent logger for direct execution\nconst log = {\n error: () => {},\n info: () => {},\n};\n\nasync function getHelp(): Promise<string> {\n return fs.readFile(path.join(__dirname, \"help.md\"), \"utf-8\");\n}\n\n//
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/suites/llm/index.ts"],"sourcesContent":["/**\n * LLM Suite - Unified LLM debugging and inspection\n */\nimport { fabricService } from \"@jaypie/fabric\";\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { debugLlmCall, validateLlmSetup, type LlmProvider } from \"./llm.js\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\n// Silent logger for direct execution\nconst log = {\n error: () => {},\n info: () => {},\n};\n\nasync function getHelp(): Promise<string> {\n return fs.readFile(path.join(__dirname, \"help.md\"), \"utf-8\");\n}\n\n// Flattened input type for the unified LLM service\ninterface LlmInput {\n command?: string;\n message?: string;\n model?: string;\n provider?: string;\n}\n\nexport const llmService = fabricService({\n alias: \"llm\",\n description:\n \"Debug LLM provider responses. Commands: debug_call. Call with no args for help.\",\n input: {\n command: {\n description: \"Command to execute (omit for help)\",\n required: false,\n type: String,\n },\n message: {\n description: \"Message to send to the LLM provider\",\n required: false,\n type: String,\n },\n model: {\n description:\n \"Model to use (provider-specific, e.g., gpt-4, claude-3-sonnet)\",\n required: false,\n type: String,\n },\n provider: {\n description: \"LLM provider: anthropic, openai, google, openrouter\",\n required: false,\n type: String,\n },\n },\n service: async (params: LlmInput) => {\n const { command } = params;\n\n if (!command || command === \"help\") {\n return getHelp();\n }\n\n const p = params;\n\n switch (command) {\n case \"validate\": {\n return validateLlmSetup();\n }\n\n case \"debug_call\": {\n if (!p.provider) throw new Error(\"provider is required\");\n if (!p.message) throw new Error(\"message is required\");\n const result = await debugLlmCall(\n {\n message: p.message,\n model: p.model,\n provider: p.provider as LlmProvider,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result;\n }\n\n default:\n throw new Error(`Unknown command: ${command}. Use llm() for help.`);\n }\n },\n});\n\n// Re-export types and functions for testing\nexport * from \"./llm.js\";\n"],"names":["__dirname"],"mappings":";;;;;;AAAA;;AAEG;AAQH,MAAMA,WAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE9D;AACA,MAAM,GAAG,GAAG;AACV,IAAA,KAAK,EAAE,MAAK,EAAE,CAAC;AACf,IAAA,IAAI,EAAE,MAAK,EAAE,CAAC;CACf;AAED,eAAe,OAAO,GAAA;AACpB,IAAA,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAACA,WAAS,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC;AAC9D;AAUO,MAAM,UAAU,GAAG,aAAa,CAAC;AACtC,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,WAAW,EACT,iFAAiF;AACnF,IAAA,KAAK,EAAE;AACL,QAAA,OAAO,EAAE;AACP,YAAA,WAAW,EAAE,oCAAoC;AACjD,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,WAAW,EAAE,qCAAqC;AAClD,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,KAAK,EAAE;AACL,YAAA,WAAW,EACT,gEAAgE;AAClE,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,WAAW,EAAE,qDAAqD;AAClE,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACF,KAAA;AACD,IAAA,OAAO,EAAE,OAAO,MAAgB,KAAI;AAClC,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM;AAE1B,QAAA,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,MAAM,EAAE;YAClC,OAAO,OAAO,EAAE;QAClB;QAEA,MAAM,CAAC,GAAG,MAAM;QAEhB,QAAQ,OAAO;YACb,KAAK,UAAU,EAAE;gBACf,OAAO,gBAAgB,EAAE;YAC3B;YAEA,KAAK,YAAY,EAAE;gBACjB,IAAI,CAAC,CAAC,CAAC,QAAQ;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;gBACxD,IAAI,CAAC,CAAC,CAAC,OAAO;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;AACtD,gBAAA,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B;oBACE,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,QAAQ,EAAE,CAAC,CAAC,QAAuB;iBACpC,EACD,GAAG,CACJ;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AAClD,gBAAA,OAAO,MAAM;YACf;AAEA,YAAA;AACE,gBAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,CAAA,qBAAA,CAAuB,CAAC;;IAEzE,CAAC;AACF,CAAA;;;;"}
|
package/dist/suites/llm/llm.d.ts
CHANGED
|
@@ -19,10 +19,28 @@ export interface LlmDebugCallResult {
|
|
|
19
19
|
usage?: unknown[];
|
|
20
20
|
error?: string;
|
|
21
21
|
}
|
|
22
|
+
export interface LlmProviderStatus {
|
|
23
|
+
available: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface LlmValidationResult {
|
|
26
|
+
success: boolean;
|
|
27
|
+
providers: {
|
|
28
|
+
anthropic: LlmProviderStatus;
|
|
29
|
+
google: LlmProviderStatus;
|
|
30
|
+
openai: LlmProviderStatus;
|
|
31
|
+
openrouter: LlmProviderStatus;
|
|
32
|
+
};
|
|
33
|
+
availableCount: number;
|
|
34
|
+
totalProviders: number;
|
|
35
|
+
}
|
|
22
36
|
interface Logger {
|
|
23
37
|
info: (message: string, ...args: unknown[]) => void;
|
|
24
38
|
error: (message: string, ...args: unknown[]) => void;
|
|
25
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Validate LLM setup without making API calls
|
|
42
|
+
*/
|
|
43
|
+
export declare function validateLlmSetup(): LlmValidationResult;
|
|
26
44
|
/**
|
|
27
45
|
* Make a debug LLM call and return the raw response data for inspection
|
|
28
46
|
*/
|
package/dist/suites/llm/llm.js
CHANGED
|
@@ -10,6 +10,33 @@ const DEFAULT_MODELS = {
|
|
|
10
10
|
openai: LLM.PROVIDER.OPENAI.MODEL.SMALL,
|
|
11
11
|
openrouter: LLM.PROVIDER.OPENROUTER.MODEL.SMALL,
|
|
12
12
|
};
|
|
13
|
+
const TOTAL_PROVIDERS = 4;
|
|
14
|
+
/**
|
|
15
|
+
* Validate LLM setup without making API calls
|
|
16
|
+
*/
|
|
17
|
+
function validateLlmSetup() {
|
|
18
|
+
const anthropicAvailable = Boolean(process.env.ANTHROPIC_API_KEY);
|
|
19
|
+
const googleAvailable = Boolean(process.env.GOOGLE_API_KEY || process.env.GEMINI_API_KEY);
|
|
20
|
+
const openaiAvailable = Boolean(process.env.OPENAI_API_KEY);
|
|
21
|
+
const openrouterAvailable = Boolean(process.env.OPENROUTER_API_KEY);
|
|
22
|
+
const availableCount = [
|
|
23
|
+
anthropicAvailable,
|
|
24
|
+
googleAvailable,
|
|
25
|
+
openaiAvailable,
|
|
26
|
+
openrouterAvailable,
|
|
27
|
+
].filter(Boolean).length;
|
|
28
|
+
return {
|
|
29
|
+
availableCount,
|
|
30
|
+
providers: {
|
|
31
|
+
anthropic: { available: anthropicAvailable },
|
|
32
|
+
google: { available: googleAvailable },
|
|
33
|
+
openai: { available: openaiAvailable },
|
|
34
|
+
openrouter: { available: openrouterAvailable },
|
|
35
|
+
},
|
|
36
|
+
success: availableCount > 0,
|
|
37
|
+
totalProviders: TOTAL_PROVIDERS,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
13
40
|
/**
|
|
14
41
|
* Make a debug LLM call and return the raw response data for inspection
|
|
15
42
|
*/
|
|
@@ -57,5 +84,5 @@ async function debugLlmCall(params, log) {
|
|
|
57
84
|
}
|
|
58
85
|
}
|
|
59
86
|
|
|
60
|
-
export { debugLlmCall };
|
|
87
|
+
export { debugLlmCall, validateLlmSetup };
|
|
61
88
|
//# sourceMappingURL=llm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm.js","sources":["../../../src/suites/llm/llm.ts"],"sourcesContent":["/**\n * LLM debugging utilities for inspecting raw provider responses\n */\n\nimport { LLM, Llm } from \"@jaypie/llm\";\n\nexport type LlmProvider = \"anthropic\" | \"gemini\" | \"openai\" | \"openrouter\";\n\nexport interface LlmDebugCallParams {\n provider: LlmProvider;\n model?: string;\n message: string;\n}\n\nexport interface LlmDebugCallResult {\n success: boolean;\n provider: string;\n model: string;\n content?: string;\n reasoning?: string[];\n reasoningTokens?: number;\n history?: unknown[];\n rawResponses?: unknown[];\n usage?: unknown[];\n error?: string;\n}\n\ninterface Logger {\n info: (message: string, ...args: unknown[]) => void;\n error: (message: string, ...args: unknown[]) => void;\n}\n\n// Default models for each provider\nconst DEFAULT_MODELS: Record<LlmProvider, string> = {\n anthropic: LLM.PROVIDER.ANTHROPIC.MODEL.SMALL,\n gemini: LLM.PROVIDER.GEMINI.MODEL.SMALL,\n openai: LLM.PROVIDER.OPENAI.MODEL.SMALL,\n openrouter: LLM.PROVIDER.OPENROUTER.MODEL.SMALL,\n};\n\n/**\n * Make a debug LLM call and return the raw response data for inspection\n */\nexport async function debugLlmCall(\n params: LlmDebugCallParams,\n log: Logger,\n): Promise<LlmDebugCallResult> {\n const { provider, message } = params;\n const model = params.model || DEFAULT_MODELS[provider];\n\n log.info(`Making debug LLM call to ${provider} with model ${model}`);\n\n try {\n const llm = new Llm(provider, { model });\n\n const result = await llm.operate(message, {\n user: \"[jaypie-mcp] Debug LLM Call\",\n });\n\n if (result.error) {\n return {\n success: false,\n provider,\n model,\n error: `${result.error.title}: ${result.error.detail || \"Unknown error\"}`,\n };\n }\n\n // Calculate total reasoning tokens\n const reasoningTokens = result.usage.reduce(\n (sum, u) => sum + (u.reasoning || 0),\n 0,\n );\n\n return {\n success: true,\n provider,\n model,\n content:\n typeof result.content === \"string\"\n ? result.content\n : JSON.stringify(result.content),\n reasoning: result.reasoning,\n reasoningTokens,\n history: result.history,\n rawResponses: result.responses,\n usage: result.usage,\n };\n } catch (error) {\n log.error(`Error calling ${provider}:`, error);\n return {\n success: false,\n provider,\n model,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n"],"names":[],"mappings":";;AAAA;;AAEG;
|
|
1
|
+
{"version":3,"file":"llm.js","sources":["../../../src/suites/llm/llm.ts"],"sourcesContent":["/**\n * LLM debugging utilities for inspecting raw provider responses\n */\n\nimport { LLM, Llm } from \"@jaypie/llm\";\n\nexport type LlmProvider = \"anthropic\" | \"gemini\" | \"openai\" | \"openrouter\";\n\nexport interface LlmDebugCallParams {\n provider: LlmProvider;\n model?: string;\n message: string;\n}\n\nexport interface LlmDebugCallResult {\n success: boolean;\n provider: string;\n model: string;\n content?: string;\n reasoning?: string[];\n reasoningTokens?: number;\n history?: unknown[];\n rawResponses?: unknown[];\n usage?: unknown[];\n error?: string;\n}\n\n// Validation types\nexport interface LlmProviderStatus {\n available: boolean;\n}\n\nexport interface LlmValidationResult {\n success: boolean;\n providers: {\n anthropic: LlmProviderStatus;\n google: LlmProviderStatus;\n openai: LlmProviderStatus;\n openrouter: LlmProviderStatus;\n };\n availableCount: number;\n totalProviders: number;\n}\n\ninterface Logger {\n info: (message: string, ...args: unknown[]) => void;\n error: (message: string, ...args: unknown[]) => void;\n}\n\n// Default models for each provider\nconst DEFAULT_MODELS: Record<LlmProvider, string> = {\n anthropic: LLM.PROVIDER.ANTHROPIC.MODEL.SMALL,\n gemini: LLM.PROVIDER.GEMINI.MODEL.SMALL,\n openai: LLM.PROVIDER.OPENAI.MODEL.SMALL,\n openrouter: LLM.PROVIDER.OPENROUTER.MODEL.SMALL,\n};\n\nconst TOTAL_PROVIDERS = 4;\n\n/**\n * Validate LLM setup without making API calls\n */\nexport function validateLlmSetup(): LlmValidationResult {\n const anthropicAvailable = Boolean(process.env.ANTHROPIC_API_KEY);\n const googleAvailable = Boolean(\n process.env.GOOGLE_API_KEY || process.env.GEMINI_API_KEY,\n );\n const openaiAvailable = Boolean(process.env.OPENAI_API_KEY);\n const openrouterAvailable = Boolean(process.env.OPENROUTER_API_KEY);\n\n const availableCount = [\n anthropicAvailable,\n googleAvailable,\n openaiAvailable,\n openrouterAvailable,\n ].filter(Boolean).length;\n\n return {\n availableCount,\n providers: {\n anthropic: { available: anthropicAvailable },\n google: { available: googleAvailable },\n openai: { available: openaiAvailable },\n openrouter: { available: openrouterAvailable },\n },\n success: availableCount > 0,\n totalProviders: TOTAL_PROVIDERS,\n };\n}\n\n/**\n * Make a debug LLM call and return the raw response data for inspection\n */\nexport async function debugLlmCall(\n params: LlmDebugCallParams,\n log: Logger,\n): Promise<LlmDebugCallResult> {\n const { provider, message } = params;\n const model = params.model || DEFAULT_MODELS[provider];\n\n log.info(`Making debug LLM call to ${provider} with model ${model}`);\n\n try {\n const llm = new Llm(provider, { model });\n\n const result = await llm.operate(message, {\n user: \"[jaypie-mcp] Debug LLM Call\",\n });\n\n if (result.error) {\n return {\n success: false,\n provider,\n model,\n error: `${result.error.title}: ${result.error.detail || \"Unknown error\"}`,\n };\n }\n\n // Calculate total reasoning tokens\n const reasoningTokens = result.usage.reduce(\n (sum, u) => sum + (u.reasoning || 0),\n 0,\n );\n\n return {\n success: true,\n provider,\n model,\n content:\n typeof result.content === \"string\"\n ? result.content\n : JSON.stringify(result.content),\n reasoning: result.reasoning,\n reasoningTokens,\n history: result.history,\n rawResponses: result.responses,\n usage: result.usage,\n };\n } catch (error) {\n log.error(`Error calling ${provider}:`, error);\n return {\n success: false,\n provider,\n model,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 0.7.10
|
|
3
|
+
date: 2025-02-02
|
|
4
|
+
summary: Flatten all MCP tool parameters to work around Claude Code MCP client nested object serialization
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Breaking Changes
|
|
8
|
+
|
|
9
|
+
All MCP tool parameters are now flat (top-level) instead of nested. This change affects all three suites (AWS, Datadog, LLM) and works around a Claude Code MCP client issue where nested objects were being serialized as JSON strings.
|
|
10
|
+
|
|
11
|
+
### New Calling Convention
|
|
12
|
+
|
|
13
|
+
Before:
|
|
14
|
+
```
|
|
15
|
+
aws("logs_filter_log_events", { logGroupName: "...", filterPattern: "..." })
|
|
16
|
+
datadog("logs", { query: "...", from: "now-1h" })
|
|
17
|
+
llm("debug_call", { provider: "openai", message: "..." })
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
After:
|
|
21
|
+
```
|
|
22
|
+
aws({ command: "logs_filter_log_events", logGroupName: "...", filterPattern: "..." })
|
|
23
|
+
datadog({ command: "logs", query: "...", from: "now-1h" })
|
|
24
|
+
llm({ command: "debug_call", provider: "openai", message: "..." })
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Array Parameters
|
|
28
|
+
|
|
29
|
+
Array parameters are now specified as comma-separated strings:
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
# Before
|
|
33
|
+
datadog("monitors", { status: ["Alert", "Warn"] })
|
|
34
|
+
|
|
35
|
+
# After
|
|
36
|
+
datadog({ command: "monitors", status: "Alert,Warn" })
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Changes
|
|
40
|
+
|
|
41
|
+
- Flattened AWS suite parameters (all 16 commands)
|
|
42
|
+
- Flattened Datadog suite parameters (all 6 commands)
|
|
43
|
+
- Flattened LLM suite parameters
|
|
44
|
+
- Updated help.md documentation for all suites
|
|
45
|
+
- Updated skills documentation (tools-aws.md, tools-datadog.md, tools-dynamodb.md, tools-llm.md)
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 0.7.11
|
|
3
|
+
date: 2025-02-02
|
|
4
|
+
summary: Add validate command to aws, datadog, and llm tools
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- Add `validate` command to `aws` tool - checks CLI availability, version, and profiles
|
|
10
|
+
- Add `validate` command to `datadog` tool - checks API/App key configuration
|
|
11
|
+
- Add `validate` command to `llm` tool - checks which provider API keys are configured
|
|
12
|
+
- Add `GEMINI_API_KEY` as alternative to `GOOGLE_API_KEY` for Google/Gemini provider
|
package/skills/tools-aws.md
CHANGED
|
@@ -9,9 +9,11 @@ Unified tool for interacting with AWS services via the Jaypie MCP. Uses your loc
|
|
|
9
9
|
|
|
10
10
|
## Usage
|
|
11
11
|
|
|
12
|
+
All parameters are passed at the top level (flat structure):
|
|
13
|
+
|
|
12
14
|
```
|
|
13
|
-
aws()
|
|
14
|
-
aws(
|
|
15
|
+
aws() # Show help with all commands
|
|
16
|
+
aws({ command: "...", ...params }) # Execute a command
|
|
15
17
|
```
|
|
16
18
|
|
|
17
19
|
## Lambda Functions
|
|
@@ -23,13 +25,13 @@ aws("command", { ...params }) # Execute a command
|
|
|
23
25
|
|
|
24
26
|
```
|
|
25
27
|
# List all functions
|
|
26
|
-
aws("lambda_list_functions")
|
|
28
|
+
aws({ command: "lambda_list_functions" })
|
|
27
29
|
|
|
28
30
|
# Filter by prefix
|
|
29
|
-
aws("lambda_list_functions",
|
|
31
|
+
aws({ command: "lambda_list_functions", functionNamePrefix: "my-api" })
|
|
30
32
|
|
|
31
33
|
# Get function details
|
|
32
|
-
aws("lambda_get_function",
|
|
34
|
+
aws({ command: "lambda_get_function", functionName: "my-api-handler" })
|
|
33
35
|
```
|
|
34
36
|
|
|
35
37
|
## Step Functions
|
|
@@ -41,10 +43,10 @@ aws("lambda_get_function", { functionName: "my-api-handler" })
|
|
|
41
43
|
|
|
42
44
|
```
|
|
43
45
|
# List recent executions
|
|
44
|
-
aws("stepfunctions_list_executions",
|
|
46
|
+
aws({ command: "stepfunctions_list_executions", stateMachineArn: "arn:aws:states:..." })
|
|
45
47
|
|
|
46
48
|
# Stop a running execution
|
|
47
|
-
aws("stepfunctions_stop_execution",
|
|
49
|
+
aws({ command: "stepfunctions_stop_execution", executionArn: "arn:aws:states:..." })
|
|
48
50
|
```
|
|
49
51
|
|
|
50
52
|
## CloudWatch Logs
|
|
@@ -55,10 +57,10 @@ aws("stepfunctions_stop_execution", { executionArn: "arn:aws:states:..." })
|
|
|
55
57
|
|
|
56
58
|
```
|
|
57
59
|
# Search for errors in Lambda logs
|
|
58
|
-
aws("logs_filter_log_events",
|
|
60
|
+
aws({ command: "logs_filter_log_events", logGroupName: "/aws/lambda/my-function", filterPattern: "ERROR" })
|
|
59
61
|
|
|
60
62
|
# Search with time range
|
|
61
|
-
aws("logs_filter_log_events",
|
|
63
|
+
aws({ command: "logs_filter_log_events", logGroupName: "/aws/lambda/my-function", startTime: "now-1h" })
|
|
62
64
|
```
|
|
63
65
|
|
|
64
66
|
## S3
|
|
@@ -69,10 +71,10 @@ aws("logs_filter_log_events", { logGroupName: "/aws/lambda/my-function", startTi
|
|
|
69
71
|
|
|
70
72
|
```
|
|
71
73
|
# List all objects
|
|
72
|
-
aws("s3_list_objects",
|
|
74
|
+
aws({ command: "s3_list_objects", bucket: "my-bucket" })
|
|
73
75
|
|
|
74
76
|
# Filter by prefix
|
|
75
|
-
aws("s3_list_objects",
|
|
77
|
+
aws({ command: "s3_list_objects", bucket: "my-bucket", prefix: "uploads/" })
|
|
76
78
|
```
|
|
77
79
|
|
|
78
80
|
## SQS
|
|
@@ -86,16 +88,16 @@ aws("s3_list_objects", { bucket: "my-bucket", prefix: "uploads/" })
|
|
|
86
88
|
|
|
87
89
|
```
|
|
88
90
|
# List queues
|
|
89
|
-
aws("sqs_list_queues",
|
|
91
|
+
aws({ command: "sqs_list_queues", queueNamePrefix: "my-app" })
|
|
90
92
|
|
|
91
93
|
# Check queue depth
|
|
92
|
-
aws("sqs_get_queue_attributes",
|
|
94
|
+
aws({ command: "sqs_get_queue_attributes", queueUrl: "https://sqs..." })
|
|
93
95
|
|
|
94
96
|
# Peek at messages
|
|
95
|
-
aws("sqs_receive_message",
|
|
97
|
+
aws({ command: "sqs_receive_message", queueUrl: "https://sqs...", maxNumberOfMessages: 5 })
|
|
96
98
|
|
|
97
99
|
# Purge queue (careful!)
|
|
98
|
-
aws("sqs_purge_queue",
|
|
100
|
+
aws({ command: "sqs_purge_queue", queueUrl: "https://sqs..." })
|
|
99
101
|
```
|
|
100
102
|
|
|
101
103
|
## CloudFormation
|
|
@@ -106,7 +108,7 @@ aws("sqs_purge_queue", { queueUrl: "https://sqs..." })
|
|
|
106
108
|
|
|
107
109
|
```
|
|
108
110
|
# Get stack details
|
|
109
|
-
aws("cloudformation_describe_stack",
|
|
111
|
+
aws({ command: "cloudformation_describe_stack", stackName: "MyStack" })
|
|
110
112
|
```
|
|
111
113
|
|
|
112
114
|
## DynamoDB
|
|
@@ -120,6 +122,47 @@ See **tools-dynamodb** for DynamoDB-specific documentation.
|
|
|
120
122
|
| `dynamodb_scan` | Full table scan |
|
|
121
123
|
| `dynamodb_get_item` | Get single item |
|
|
122
124
|
|
|
125
|
+
## Parameters
|
|
126
|
+
|
|
127
|
+
| Parameter | Type | Description |
|
|
128
|
+
|-----------|------|-------------|
|
|
129
|
+
| `command` | string | Command to execute (omit for help) |
|
|
130
|
+
| `profile` | string | AWS profile name |
|
|
131
|
+
| `region` | string | AWS region (e.g., us-east-1) |
|
|
132
|
+
| `functionName` | string | Lambda function name |
|
|
133
|
+
| `functionNamePrefix` | string | Lambda function name prefix filter |
|
|
134
|
+
| `stateMachineArn` | string | Step Functions state machine ARN |
|
|
135
|
+
| `executionArn` | string | Step Functions execution ARN |
|
|
136
|
+
| `statusFilter` | string | Step Functions status: RUNNING, SUCCEEDED, FAILED, TIMED_OUT, ABORTED, PENDING_REDRIVE |
|
|
137
|
+
| `logGroupName` | string | CloudWatch Logs group name |
|
|
138
|
+
| `filterPattern` | string | CloudWatch Logs filter pattern |
|
|
139
|
+
| `startTime` | string | Start time (e.g., now-15m) |
|
|
140
|
+
| `endTime` | string | End time (e.g., now) |
|
|
141
|
+
| `bucket` | string | S3 bucket name |
|
|
142
|
+
| `prefix` | string | S3 object prefix filter |
|
|
143
|
+
| `stackName` | string | CloudFormation stack name |
|
|
144
|
+
| `tableName` | string | DynamoDB table name |
|
|
145
|
+
| `keyConditionExpression` | string | DynamoDB key condition expression |
|
|
146
|
+
| `expressionAttributeValues` | string | DynamoDB expression attribute values (JSON string) |
|
|
147
|
+
| `queueUrl` | string | SQS queue URL |
|
|
148
|
+
| `queueNamePrefix` | string | SQS queue name prefix filter |
|
|
149
|
+
| `maxNumberOfMessages` | number | SQS max messages to receive |
|
|
150
|
+
| `limit` | number | Maximum number of results |
|
|
151
|
+
| `maxResults` | number | Maximum number of results |
|
|
152
|
+
|
|
153
|
+
## Validation
|
|
154
|
+
|
|
155
|
+
Check AWS CLI availability and list profiles without making API calls:
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
aws({ command: "validate" })
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Returns:
|
|
162
|
+
- `cliAvailable` - Whether AWS CLI is installed
|
|
163
|
+
- `cliVersion` - AWS CLI version string
|
|
164
|
+
- `profiles` - List of configured profiles from ~/.aws/config and ~/.aws/credentials
|
|
165
|
+
|
|
123
166
|
## Credential Management
|
|
124
167
|
|
|
125
168
|
Tools use the host's AWS credential chain:
|
|
@@ -129,10 +172,10 @@ Tools use the host's AWS credential chain:
|
|
|
129
172
|
|
|
130
173
|
```
|
|
131
174
|
# List available profiles
|
|
132
|
-
aws("list_profiles")
|
|
175
|
+
aws({ command: "list_profiles" })
|
|
133
176
|
|
|
134
177
|
# Use a specific profile (supported on all commands)
|
|
135
|
-
aws("lambda_list_functions",
|
|
178
|
+
aws({ command: "lambda_list_functions", profile: "production", region: "us-west-2" })
|
|
136
179
|
```
|
|
137
180
|
|
|
138
181
|
## Environment Variables
|
|
@@ -148,19 +191,18 @@ aws("lambda_list_functions", { profile: "production", region: "us-west-2" })
|
|
|
148
191
|
|
|
149
192
|
```
|
|
150
193
|
# Check function config
|
|
151
|
-
aws("lambda_get_function",
|
|
194
|
+
aws({ command: "lambda_get_function", functionName: "my-function" })
|
|
152
195
|
|
|
153
196
|
# Search recent logs
|
|
154
|
-
aws("logs_filter_log_events",
|
|
197
|
+
aws({ command: "logs_filter_log_events", logGroupName: "/aws/lambda/my-function", filterPattern: "ERROR" })
|
|
155
198
|
```
|
|
156
199
|
|
|
157
200
|
### Check Queue Health
|
|
158
201
|
|
|
159
202
|
```
|
|
160
203
|
# Get queue depth
|
|
161
|
-
aws("sqs_get_queue_attributes",
|
|
204
|
+
aws({ command: "sqs_get_queue_attributes", queueUrl: "https://..." })
|
|
162
205
|
|
|
163
206
|
# Peek at messages
|
|
164
|
-
aws("sqs_receive_message",
|
|
207
|
+
aws({ command: "sqs_receive_message", queueUrl: "https://...", maxNumberOfMessages: 5 })
|
|
165
208
|
```
|
|
166
|
-
|
package/skills/tools-datadog.md
CHANGED
|
@@ -9,9 +9,11 @@ Unified tool for querying Datadog observability data via the Jaypie MCP.
|
|
|
9
9
|
|
|
10
10
|
## Usage
|
|
11
11
|
|
|
12
|
+
All parameters are passed at the top level (flat structure):
|
|
13
|
+
|
|
12
14
|
```
|
|
13
|
-
datadog()
|
|
14
|
-
datadog(
|
|
15
|
+
datadog() # Show help
|
|
16
|
+
datadog({ command: "logs", query: "...", ... }) # Execute a command
|
|
15
17
|
```
|
|
16
18
|
|
|
17
19
|
## Available Commands
|
|
@@ -25,6 +27,38 @@ datadog("command", { ...params }) # Execute a command
|
|
|
25
27
|
| `metrics` | Query timeseries metrics |
|
|
26
28
|
| `rum` | Search Real User Monitoring events |
|
|
27
29
|
|
|
30
|
+
## Parameters
|
|
31
|
+
|
|
32
|
+
| Parameter | Type | Description |
|
|
33
|
+
|-----------|------|-------------|
|
|
34
|
+
| `command` | string | Command to execute (logs, log_analytics, monitors, synthetics, metrics, rum) |
|
|
35
|
+
| `query` | string | Datadog query string (e.g., `status:error`, `@lambda.arn:"arn:..."`) |
|
|
36
|
+
| `from` | string | Start time (e.g., now-1h, now-15m, now-1d) |
|
|
37
|
+
| `to` | string | End time (e.g., now) |
|
|
38
|
+
| `limit` | number | Maximum results to return |
|
|
39
|
+
| `env` | string | Environment filter |
|
|
40
|
+
| `service` | string | Service name filter |
|
|
41
|
+
| `source` | string | Log source filter (default: lambda) |
|
|
42
|
+
| `groupBy` | string | Fields to group by, comma-separated (for log_analytics) |
|
|
43
|
+
| `aggregation` | string | Aggregation type: count, avg, sum, min, max, cardinality |
|
|
44
|
+
| `status` | string | Monitor status filter, comma-separated: Alert, Warn, No Data, OK |
|
|
45
|
+
| `tags` | string | Tags filter, comma-separated |
|
|
46
|
+
| `testId` | string | Synthetic test ID for getting results |
|
|
47
|
+
| `type` | string | Synthetic test type: api or browser |
|
|
48
|
+
|
|
49
|
+
## Validation
|
|
50
|
+
|
|
51
|
+
Check Datadog API key configuration without making API calls:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
datadog({ command: "validate" })
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Returns:
|
|
58
|
+
- `apiKey` - { present: boolean, source: "DATADOG_API_KEY" | "DD_API_KEY" | null }
|
|
59
|
+
- `appKey` - { present: boolean, source: "DATADOG_APP_KEY" | "DATADOG_APPLICATION_KEY" | "DD_APP_KEY" | "DD_APPLICATION_KEY" | null }
|
|
60
|
+
- `success` - true if both keys are present
|
|
61
|
+
|
|
28
62
|
## Environment Variables
|
|
29
63
|
|
|
30
64
|
Configure defaults via environment:
|
|
@@ -43,60 +77,58 @@ Search individual log entries:
|
|
|
43
77
|
|
|
44
78
|
```
|
|
45
79
|
# Search error logs
|
|
46
|
-
datadog("logs",
|
|
80
|
+
datadog({ command: "logs", query: "status:error", from: "now-1h" })
|
|
47
81
|
|
|
48
82
|
# Search by service
|
|
49
|
-
datadog("logs",
|
|
83
|
+
datadog({ command: "logs", query: "service:my-api status:error", from: "now-15m" })
|
|
84
|
+
|
|
85
|
+
# Search by Lambda ARN
|
|
86
|
+
datadog({ command: "logs", query: "@lambda.arn:\"arn:aws:lambda:us-east-1:...\"", from: "now-1h" })
|
|
50
87
|
|
|
51
88
|
# Search by attribute
|
|
52
|
-
datadog("logs",
|
|
89
|
+
datadog({ command: "logs", query: "@http.status_code:500", from: "now-1h" })
|
|
53
90
|
|
|
54
91
|
# Wildcard search
|
|
55
|
-
datadog("logs",
|
|
92
|
+
datadog({ command: "logs", query: "*timeout*", from: "now-30m" })
|
|
56
93
|
|
|
57
94
|
# Limit results
|
|
58
|
-
datadog("logs",
|
|
95
|
+
datadog({ command: "logs", query: "status:error", from: "now-1h", limit: 100 })
|
|
59
96
|
```
|
|
60
97
|
|
|
61
98
|
## Log Analytics
|
|
62
99
|
|
|
63
|
-
Aggregate logs for statistics:
|
|
100
|
+
Aggregate logs for statistics (use comma-separated groupBy):
|
|
64
101
|
|
|
65
102
|
```
|
|
66
103
|
# Count errors by service
|
|
67
|
-
datadog("log_analytics",
|
|
104
|
+
datadog({ command: "log_analytics", groupBy: "service", query: "status:error" })
|
|
68
105
|
|
|
69
106
|
# Count by status code
|
|
70
|
-
datadog("log_analytics",
|
|
107
|
+
datadog({ command: "log_analytics", groupBy: "@http.status_code", query: "*" })
|
|
71
108
|
|
|
72
109
|
# Multiple groupings
|
|
73
|
-
datadog("log_analytics",
|
|
110
|
+
datadog({ command: "log_analytics", groupBy: "service,status", query: "*" })
|
|
74
111
|
|
|
75
112
|
# Average response time
|
|
76
|
-
datadog("log_analytics",
|
|
77
|
-
groupBy: ["service"],
|
|
78
|
-
aggregation: "avg",
|
|
79
|
-
metric: "@duration",
|
|
80
|
-
query: "*"
|
|
81
|
-
})
|
|
113
|
+
datadog({ command: "log_analytics", groupBy: "service", aggregation: "avg", metric: "@duration", query: "*" })
|
|
82
114
|
```
|
|
83
115
|
|
|
84
116
|
## Monitors
|
|
85
117
|
|
|
86
|
-
Check monitor status:
|
|
118
|
+
Check monitor status (use comma-separated status):
|
|
87
119
|
|
|
88
120
|
```
|
|
89
121
|
# List all monitors
|
|
90
|
-
datadog("monitors")
|
|
122
|
+
datadog({ command: "monitors" })
|
|
91
123
|
|
|
92
124
|
# Filter alerting monitors
|
|
93
|
-
datadog("monitors",
|
|
125
|
+
datadog({ command: "monitors", status: "Alert,Warn" })
|
|
94
126
|
|
|
95
127
|
# Filter by name
|
|
96
|
-
datadog("monitors",
|
|
128
|
+
datadog({ command: "monitors", name: "my-api" })
|
|
97
129
|
|
|
98
130
|
# Filter by tags
|
|
99
|
-
datadog("monitors",
|
|
131
|
+
datadog({ command: "monitors", tags: "env:production" })
|
|
100
132
|
```
|
|
101
133
|
|
|
102
134
|
## Synthetics
|
|
@@ -105,14 +137,14 @@ List synthetic tests:
|
|
|
105
137
|
|
|
106
138
|
```
|
|
107
139
|
# List all tests
|
|
108
|
-
datadog("synthetics")
|
|
140
|
+
datadog({ command: "synthetics" })
|
|
109
141
|
|
|
110
142
|
# Filter by type
|
|
111
|
-
datadog("synthetics",
|
|
112
|
-
datadog("synthetics",
|
|
143
|
+
datadog({ command: "synthetics", type: "api" })
|
|
144
|
+
datadog({ command: "synthetics", type: "browser" })
|
|
113
145
|
|
|
114
146
|
# Get results for specific test
|
|
115
|
-
datadog("synthetics",
|
|
147
|
+
datadog({ command: "synthetics", testId: "abc-123-def" })
|
|
116
148
|
```
|
|
117
149
|
|
|
118
150
|
## Metrics
|
|
@@ -121,13 +153,13 @@ Query timeseries metrics:
|
|
|
121
153
|
|
|
122
154
|
```
|
|
123
155
|
# CPU usage
|
|
124
|
-
datadog("metrics",
|
|
156
|
+
datadog({ command: "metrics", query: "avg:system.cpu.user{*}", from: "1h" })
|
|
125
157
|
|
|
126
158
|
# Lambda invocations
|
|
127
|
-
datadog("metrics",
|
|
159
|
+
datadog({ command: "metrics", query: "sum:aws.lambda.invocations{function:my-func}.as_count()", from: "1h" })
|
|
128
160
|
|
|
129
161
|
# Lambda duration
|
|
130
|
-
datadog("metrics",
|
|
162
|
+
datadog({ command: "metrics", query: "max:aws.lambda.duration{env:production}", from: "30m" })
|
|
131
163
|
```
|
|
132
164
|
|
|
133
165
|
## RUM Events
|
|
@@ -136,16 +168,16 @@ Search Real User Monitoring events:
|
|
|
136
168
|
|
|
137
169
|
```
|
|
138
170
|
# Search all events
|
|
139
|
-
datadog("rum",
|
|
171
|
+
datadog({ command: "rum", from: "now-1h" })
|
|
140
172
|
|
|
141
173
|
# Filter by type
|
|
142
|
-
datadog("rum",
|
|
174
|
+
datadog({ command: "rum", query: "@type:error", from: "now-1h" })
|
|
143
175
|
|
|
144
176
|
# Filter by session
|
|
145
|
-
datadog("rum",
|
|
177
|
+
datadog({ command: "rum", query: "@session.id:abc123", from: "now-1h" })
|
|
146
178
|
|
|
147
179
|
# Filter by URL
|
|
148
|
-
datadog("rum",
|
|
180
|
+
datadog({ command: "rum", query: "@view.url:*checkout*", from: "now-1h" })
|
|
149
181
|
```
|
|
150
182
|
|
|
151
183
|
## Query Syntax
|
|
@@ -157,6 +189,7 @@ status:error # By status
|
|
|
157
189
|
@http.status_code:500 # By attribute
|
|
158
190
|
service:my-api # By service
|
|
159
191
|
*timeout* # Wildcard
|
|
192
|
+
@lambda.arn:"arn:aws:..." # Quoted values
|
|
160
193
|
```
|
|
161
194
|
|
|
162
195
|
### Time Ranges
|
|
@@ -174,26 +207,25 @@ now-1d # Last day
|
|
|
174
207
|
|
|
175
208
|
```
|
|
176
209
|
# Search recent errors
|
|
177
|
-
datadog("logs",
|
|
210
|
+
datadog({ command: "logs", query: "service:my-function status:error", from: "now-1h" })
|
|
178
211
|
|
|
179
212
|
# Check error counts by service
|
|
180
|
-
datadog("log_analytics",
|
|
213
|
+
datadog({ command: "log_analytics", groupBy: "service", query: "status:error", from: "now-1h" })
|
|
181
214
|
```
|
|
182
215
|
|
|
183
216
|
### Monitor Status Check
|
|
184
217
|
|
|
185
218
|
```
|
|
186
219
|
# Check alerting monitors
|
|
187
|
-
datadog("monitors",
|
|
220
|
+
datadog({ command: "monitors", status: "Alert,Warn" })
|
|
188
221
|
```
|
|
189
222
|
|
|
190
223
|
### Frontend Issues
|
|
191
224
|
|
|
192
225
|
```
|
|
193
226
|
# Search RUM errors
|
|
194
|
-
datadog("rum",
|
|
227
|
+
datadog({ command: "rum", query: "@type:error", from: "now-1h" })
|
|
195
228
|
|
|
196
229
|
# Check synthetic test results
|
|
197
|
-
datadog("synthetics",
|
|
230
|
+
datadog({ command: "synthetics", testId: "my-checkout-test" })
|
|
198
231
|
```
|
|
199
|
-
|