@jaypie/mcp 0.7.45 → 0.8.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/dist/suite.d.ts +1 -3
- package/dist/suite.js +1 -9
- package/dist/suite.js.map +1 -1
- package/dist/suites/docs/index.js +2 -9
- package/dist/suites/docs/index.js.map +1 -1
- package/package.json +1 -2
- package/release-notes/aws/1.2.7.md +13 -0
- package/release-notes/constructs/1.2.36.md +9 -0
- package/release-notes/jaypie/1.2.24.md +11 -0
- package/release-notes/llm/1.2.19.md +11 -0
- package/release-notes/mcp/0.8.0.md +21 -0
- package/skills/agents.md +4 -3
- package/skills/aws.md +1 -6
- package/skills/contents.md +1 -1
- package/skills/datadog.md +3 -3
- package/skills/dynamodb.md +1 -6
- package/skills/fabric.md +1 -1
- package/skills/llm.md +1 -0
- package/skills/{tools-datadog.md → mcp-datadog.md} +4 -4
- package/skills/mcp.md +63 -0
- package/skills/meta.md +3 -3
- package/skills/practice.md +10 -0
- package/skills/skills.md +2 -2
- package/skills/tildeskill.md +1 -1
- package/skills/tools.md +170 -85
- package/dist/suites/aws/aws.d.ts +0 -207
- package/dist/suites/aws/aws.js +0 -369
- package/dist/suites/aws/aws.js.map +0 -1
- package/dist/suites/aws/help.md +0 -87
- package/dist/suites/aws/index.d.ts +0 -68
- package/dist/suites/aws/index.js +0 -397
- package/dist/suites/aws/index.js.map +0 -1
- package/dist/suites/llm/help.md +0 -58
- package/dist/suites/llm/index.d.ts +0 -2
- package/dist/suites/llm/index.js +0 -77
- package/dist/suites/llm/index.js.map +0 -1
- package/dist/suites/llm/llm.d.ts +0 -53
- package/dist/suites/llm/llm.js +0 -111
- package/dist/suites/llm/llm.js.map +0 -1
- package/skills/index.md +0 -18
- package/skills/tools-aws.md +0 -208
- package/skills/tools-dynamodb.md +0 -179
- package/skills/tools-llm.md +0 -109
package/dist/suites/llm/llm.js
DELETED
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { LLM, Llm } from '@jaypie/llm';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* LLM debugging utilities for inspecting raw provider responses
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* Infer provider from model string prefix
|
|
8
|
-
*/
|
|
9
|
-
function inferProvider(model) {
|
|
10
|
-
const m = model.toLowerCase();
|
|
11
|
-
if (m.startsWith("claude-"))
|
|
12
|
-
return "anthropic";
|
|
13
|
-
if (m.startsWith("gemini-"))
|
|
14
|
-
return "google";
|
|
15
|
-
if (m.startsWith("chatgpt-") ||
|
|
16
|
-
m.startsWith("gpt-") ||
|
|
17
|
-
m.startsWith("o1-") ||
|
|
18
|
-
m.startsWith("o3-") ||
|
|
19
|
-
m.startsWith("o4-"))
|
|
20
|
-
return "openai";
|
|
21
|
-
if (m.startsWith("grok-"))
|
|
22
|
-
return "xai";
|
|
23
|
-
return undefined;
|
|
24
|
-
}
|
|
25
|
-
// Default models for each provider
|
|
26
|
-
const DEFAULT_MODELS = {
|
|
27
|
-
anthropic: LLM.PROVIDER.ANTHROPIC.MODEL.SMALL,
|
|
28
|
-
google: LLM.PROVIDER.GEMINI.MODEL.SMALL,
|
|
29
|
-
openai: LLM.PROVIDER.OPENAI.MODEL.SMALL,
|
|
30
|
-
openrouter: LLM.PROVIDER.OPENROUTER.MODEL.SMALL,
|
|
31
|
-
xai: LLM.PROVIDER.XAI.MODEL.SMALL,
|
|
32
|
-
};
|
|
33
|
-
const TOTAL_PROVIDERS = 5;
|
|
34
|
-
/**
|
|
35
|
-
* Validate LLM setup without making API calls
|
|
36
|
-
*/
|
|
37
|
-
function validateLlmSetup() {
|
|
38
|
-
const anthropicAvailable = Boolean(process.env.ANTHROPIC_API_KEY);
|
|
39
|
-
const googleAvailable = Boolean(process.env.GOOGLE_API_KEY || process.env.GEMINI_API_KEY);
|
|
40
|
-
const openaiAvailable = Boolean(process.env.OPENAI_API_KEY);
|
|
41
|
-
const openrouterAvailable = Boolean(process.env.OPENROUTER_API_KEY);
|
|
42
|
-
const xaiAvailable = Boolean(process.env.XAI_API_KEY);
|
|
43
|
-
const availableCount = [
|
|
44
|
-
anthropicAvailable,
|
|
45
|
-
googleAvailable,
|
|
46
|
-
openaiAvailable,
|
|
47
|
-
openrouterAvailable,
|
|
48
|
-
xaiAvailable,
|
|
49
|
-
].filter(Boolean).length;
|
|
50
|
-
return {
|
|
51
|
-
availableCount,
|
|
52
|
-
providers: {
|
|
53
|
-
anthropic: { available: anthropicAvailable },
|
|
54
|
-
google: { available: googleAvailable },
|
|
55
|
-
openai: { available: openaiAvailable },
|
|
56
|
-
openrouter: { available: openrouterAvailable },
|
|
57
|
-
xai: { available: xaiAvailable },
|
|
58
|
-
},
|
|
59
|
-
success: availableCount > 0,
|
|
60
|
-
totalProviders: TOTAL_PROVIDERS,
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Make a debug LLM call and return the raw response data for inspection
|
|
65
|
-
*/
|
|
66
|
-
async function debugLlmCall(params, log) {
|
|
67
|
-
const { provider, message } = params;
|
|
68
|
-
const model = params.model || DEFAULT_MODELS[provider];
|
|
69
|
-
log.info(`Making debug LLM call to ${provider} with model ${model}`);
|
|
70
|
-
try {
|
|
71
|
-
const llm = new Llm(provider, { model });
|
|
72
|
-
const result = await llm.operate(message, {
|
|
73
|
-
user: "[jaypie-mcp] Debug LLM Call",
|
|
74
|
-
});
|
|
75
|
-
if (result.error) {
|
|
76
|
-
return {
|
|
77
|
-
success: false,
|
|
78
|
-
provider,
|
|
79
|
-
model,
|
|
80
|
-
error: `${result.error.title}: ${result.error.detail || "Unknown error"}`,
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
// Calculate total reasoning tokens
|
|
84
|
-
const reasoningTokens = result.usage.reduce((sum, u) => sum + (u.reasoning || 0), 0);
|
|
85
|
-
return {
|
|
86
|
-
success: true,
|
|
87
|
-
provider,
|
|
88
|
-
model,
|
|
89
|
-
content: typeof result.content === "string"
|
|
90
|
-
? result.content
|
|
91
|
-
: JSON.stringify(result.content),
|
|
92
|
-
reasoning: result.reasoning,
|
|
93
|
-
reasoningTokens,
|
|
94
|
-
history: result.history,
|
|
95
|
-
rawResponses: result.responses,
|
|
96
|
-
usage: result.usage,
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
catch (error) {
|
|
100
|
-
log.error(`Error calling ${provider}:`, error);
|
|
101
|
-
return {
|
|
102
|
-
success: false,
|
|
103
|
-
provider,
|
|
104
|
-
model,
|
|
105
|
-
error: error instanceof Error ? error.message : String(error),
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
export { debugLlmCall, inferProvider, validateLlmSetup };
|
|
111
|
-
//# sourceMappingURL=llm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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 =\n | \"anthropic\"\n | \"google\"\n | \"openai\"\n | \"openrouter\"\n | \"xai\";\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 xai: 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/**\n * Infer provider from model string prefix\n */\nexport function inferProvider(model: string): LlmProvider | undefined {\n const m = model.toLowerCase();\n if (m.startsWith(\"claude-\")) return \"anthropic\";\n if (m.startsWith(\"gemini-\")) return \"google\";\n if (\n m.startsWith(\"chatgpt-\") ||\n m.startsWith(\"gpt-\") ||\n m.startsWith(\"o1-\") ||\n m.startsWith(\"o3-\") ||\n m.startsWith(\"o4-\")\n )\n return \"openai\";\n if (m.startsWith(\"grok-\")) return \"xai\";\n return undefined;\n}\n\n// Default models for each provider\nconst DEFAULT_MODELS: Record<LlmProvider, string> = {\n anthropic: LLM.PROVIDER.ANTHROPIC.MODEL.SMALL,\n google: LLM.PROVIDER.GEMINI.MODEL.SMALL,\n openai: LLM.PROVIDER.OPENAI.MODEL.SMALL,\n openrouter: LLM.PROVIDER.OPENROUTER.MODEL.SMALL,\n xai: LLM.PROVIDER.XAI.MODEL.SMALL,\n};\n\nconst TOTAL_PROVIDERS = 5;\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 const xaiAvailable = Boolean(process.env.XAI_API_KEY);\n\n const availableCount = [\n anthropicAvailable,\n googleAvailable,\n openaiAvailable,\n openrouterAvailable,\n xaiAvailable,\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 xai: { available: xaiAvailable },\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/skills/index.md
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Skill directory listing
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# Jaypie Skills
|
|
6
|
-
|
|
7
|
-
Query the Jaypie MCP `skill` tool with one of the following alias keywords `mcp__jaypie__skill(alias: String)`:
|
|
8
|
-
|
|
9
|
-
## Categories
|
|
10
|
-
|
|
11
|
-
| Category | Skills |
|
|
12
|
-
|----------|--------|
|
|
13
|
-
| contents | index, releasenotes |
|
|
14
|
-
| development | apikey, documentation, errors, llm, logs, mocks, monorepo, style, subpackages, tests |
|
|
15
|
-
| infrastructure | aws, cdk, cicd, datadog, dns, dynamodb, express, lambda, secrets, streaming, variables, websockets |
|
|
16
|
-
| patterns | api, fabric, handlers, models, services, vocabulary |
|
|
17
|
-
| recipes | recipe-api-server |
|
|
18
|
-
| meta | issues, jaypie, skills, tools |
|
package/skills/tools-aws.md
DELETED
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: AWS MCP tool for Lambda, S3, SQS, CloudWatch, Step Functions, CloudFormation
|
|
3
|
-
related: aws, tools, tools-dynamodb
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# AWS MCP Tool
|
|
7
|
-
|
|
8
|
-
Unified tool for interacting with AWS services via the Jaypie MCP. Uses your local AWS credentials.
|
|
9
|
-
|
|
10
|
-
## Usage
|
|
11
|
-
|
|
12
|
-
All parameters are passed at the top level (flat structure):
|
|
13
|
-
|
|
14
|
-
```
|
|
15
|
-
aws() # Show help with all commands
|
|
16
|
-
aws({ command: "...", ...params }) # Execute a command
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Lambda Functions
|
|
20
|
-
|
|
21
|
-
| Command | Description |
|
|
22
|
-
|---------|-------------|
|
|
23
|
-
| `lambda_list_functions` | List functions with optional prefix filter |
|
|
24
|
-
| `lambda_get_function` | Get function configuration and details |
|
|
25
|
-
|
|
26
|
-
```
|
|
27
|
-
# List all functions
|
|
28
|
-
aws({ command: "lambda_list_functions" })
|
|
29
|
-
|
|
30
|
-
# Filter by prefix
|
|
31
|
-
aws({ command: "lambda_list_functions", functionNamePrefix: "my-api" })
|
|
32
|
-
|
|
33
|
-
# Get function details
|
|
34
|
-
aws({ command: "lambda_get_function", functionName: "my-api-handler" })
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Step Functions
|
|
38
|
-
|
|
39
|
-
| Command | Description |
|
|
40
|
-
|---------|-------------|
|
|
41
|
-
| `stepfunctions_list_executions` | List executions for a state machine |
|
|
42
|
-
| `stepfunctions_stop_execution` | Stop a running execution |
|
|
43
|
-
|
|
44
|
-
```
|
|
45
|
-
# List recent executions
|
|
46
|
-
aws({ command: "stepfunctions_list_executions", stateMachineArn: "arn:aws:states:..." })
|
|
47
|
-
|
|
48
|
-
# Stop a running execution
|
|
49
|
-
aws({ command: "stepfunctions_stop_execution", executionArn: "arn:aws:states:..." })
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## CloudWatch Logs
|
|
53
|
-
|
|
54
|
-
| Command | Description |
|
|
55
|
-
|---------|-------------|
|
|
56
|
-
| `logs_filter_log_events` | Search logs with patterns and time ranges |
|
|
57
|
-
|
|
58
|
-
```
|
|
59
|
-
# Search for errors in Lambda logs
|
|
60
|
-
aws({ command: "logs_filter_log_events", logGroupName: "/aws/lambda/my-function", filterPattern: "ERROR" })
|
|
61
|
-
|
|
62
|
-
# Search with time range
|
|
63
|
-
aws({ command: "logs_filter_log_events", logGroupName: "/aws/lambda/my-function", startTime: "now-1h" })
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
## S3
|
|
67
|
-
|
|
68
|
-
| Command | Description |
|
|
69
|
-
|---------|-------------|
|
|
70
|
-
| `s3_list_objects` | List bucket objects with prefix filtering |
|
|
71
|
-
|
|
72
|
-
```
|
|
73
|
-
# List all objects
|
|
74
|
-
aws({ command: "s3_list_objects", bucket: "my-bucket" })
|
|
75
|
-
|
|
76
|
-
# Filter by prefix
|
|
77
|
-
aws({ command: "s3_list_objects", bucket: "my-bucket", prefix: "uploads/" })
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
## SQS
|
|
81
|
-
|
|
82
|
-
| Command | Description |
|
|
83
|
-
|---------|-------------|
|
|
84
|
-
| `sqs_list_queues` | List queues with prefix filter |
|
|
85
|
-
| `sqs_get_queue_attributes` | Get queue attributes including message counts |
|
|
86
|
-
| `sqs_receive_message` | Peek at queue messages (does not delete) |
|
|
87
|
-
| `sqs_purge_queue` | Delete all messages (irreversible) |
|
|
88
|
-
|
|
89
|
-
```
|
|
90
|
-
# List queues
|
|
91
|
-
aws({ command: "sqs_list_queues", queueNamePrefix: "my-app" })
|
|
92
|
-
|
|
93
|
-
# Check queue depth
|
|
94
|
-
aws({ command: "sqs_get_queue_attributes", queueUrl: "https://sqs..." })
|
|
95
|
-
|
|
96
|
-
# Peek at messages
|
|
97
|
-
aws({ command: "sqs_receive_message", queueUrl: "https://sqs...", maxNumberOfMessages: 5 })
|
|
98
|
-
|
|
99
|
-
# Purge queue (careful!)
|
|
100
|
-
aws({ command: "sqs_purge_queue", queueUrl: "https://sqs..." })
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
## CloudFormation
|
|
104
|
-
|
|
105
|
-
| Command | Description |
|
|
106
|
-
|---------|-------------|
|
|
107
|
-
| `cloudformation_describe_stack` | Get stack details, outputs, and status |
|
|
108
|
-
|
|
109
|
-
```
|
|
110
|
-
# Get stack details
|
|
111
|
-
aws({ command: "cloudformation_describe_stack", stackName: "MyStack" })
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## DynamoDB
|
|
115
|
-
|
|
116
|
-
See **tools-dynamodb** for DynamoDB-specific documentation.
|
|
117
|
-
|
|
118
|
-
| Command | Description |
|
|
119
|
-
|---------|-------------|
|
|
120
|
-
| `dynamodb_describe_table` | Get table metadata |
|
|
121
|
-
| `dynamodb_query` | Query by partition key |
|
|
122
|
-
| `dynamodb_scan` | Full table scan |
|
|
123
|
-
| `dynamodb_get_item` | Get single item |
|
|
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
|
-
|
|
166
|
-
## Credential Management
|
|
167
|
-
|
|
168
|
-
Tools use the host's AWS credential chain:
|
|
169
|
-
1. Environment variables (`AWS_ACCESS_KEY_ID`, etc.)
|
|
170
|
-
2. `~/.aws/credentials` and `~/.aws/config`
|
|
171
|
-
3. SSO sessions via `aws sso login`
|
|
172
|
-
|
|
173
|
-
```
|
|
174
|
-
# List available profiles
|
|
175
|
-
aws({ command: "list_profiles" })
|
|
176
|
-
|
|
177
|
-
# Use a specific profile (supported on all commands)
|
|
178
|
-
aws({ command: "lambda_list_functions", profile: "production", region: "us-west-2" })
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
## Environment Variables
|
|
182
|
-
|
|
183
|
-
| Variable | Description |
|
|
184
|
-
|----------|-------------|
|
|
185
|
-
| `AWS_PROFILE` | Default profile |
|
|
186
|
-
| `AWS_REGION` | Default region |
|
|
187
|
-
|
|
188
|
-
## Common Patterns
|
|
189
|
-
|
|
190
|
-
### Debug Lambda Issues
|
|
191
|
-
|
|
192
|
-
```
|
|
193
|
-
# Check function config
|
|
194
|
-
aws({ command: "lambda_get_function", functionName: "my-function" })
|
|
195
|
-
|
|
196
|
-
# Search recent logs
|
|
197
|
-
aws({ command: "logs_filter_log_events", logGroupName: "/aws/lambda/my-function", filterPattern: "ERROR" })
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
### Check Queue Health
|
|
201
|
-
|
|
202
|
-
```
|
|
203
|
-
# Get queue depth
|
|
204
|
-
aws({ command: "sqs_get_queue_attributes", queueUrl: "https://..." })
|
|
205
|
-
|
|
206
|
-
# Peek at messages
|
|
207
|
-
aws({ command: "sqs_receive_message", queueUrl: "https://...", maxNumberOfMessages: 5 })
|
|
208
|
-
```
|
package/skills/tools-dynamodb.md
DELETED
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: DynamoDB commands in the AWS MCP tool for table queries, scans, and item retrieval
|
|
3
|
-
related: dynamodb, tools, tools-aws
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# DynamoDB MCP Commands
|
|
7
|
-
|
|
8
|
-
DynamoDB commands in the unified AWS tool for interacting with DynamoDB tables.
|
|
9
|
-
|
|
10
|
-
## Usage
|
|
11
|
-
|
|
12
|
-
All parameters are passed at the top level (flat structure):
|
|
13
|
-
|
|
14
|
-
```
|
|
15
|
-
aws({ command: "dynamodb_command", ...params })
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Available Commands
|
|
19
|
-
|
|
20
|
-
| Command | Description |
|
|
21
|
-
|---------|-------------|
|
|
22
|
-
| `dynamodb_describe_table` | Get table schema, indexes, and metadata |
|
|
23
|
-
| `dynamodb_query` | Query by partition key (efficient) |
|
|
24
|
-
| `dynamodb_scan` | Full table scan (use sparingly) |
|
|
25
|
-
| `dynamodb_get_item` | Get single item by primary key |
|
|
26
|
-
|
|
27
|
-
## Describe Table
|
|
28
|
-
|
|
29
|
-
Get table metadata including key schema, indexes, and throughput:
|
|
30
|
-
|
|
31
|
-
```
|
|
32
|
-
aws({ command: "dynamodb_describe_table", tableName: "MyTable" })
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
Returns:
|
|
36
|
-
- Key schema (partition key, sort key)
|
|
37
|
-
- Global secondary indexes
|
|
38
|
-
- Billing mode and provisioned throughput
|
|
39
|
-
- Item count and size estimates
|
|
40
|
-
|
|
41
|
-
## Query by Partition Key
|
|
42
|
-
|
|
43
|
-
Query is the most efficient way to retrieve items:
|
|
44
|
-
|
|
45
|
-
```
|
|
46
|
-
# Simple partition key query
|
|
47
|
-
aws({
|
|
48
|
-
command: "dynamodb_query",
|
|
49
|
-
tableName: "MyTable",
|
|
50
|
-
keyConditionExpression: "pk = :pk",
|
|
51
|
-
expressionAttributeValues: '{":pk":{"S":"USER#123"}}'
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
# With sort key condition
|
|
55
|
-
aws({
|
|
56
|
-
command: "dynamodb_query",
|
|
57
|
-
tableName: "MyTable",
|
|
58
|
-
keyConditionExpression: "pk = :pk AND begins_with(sk, :prefix)",
|
|
59
|
-
expressionAttributeValues: '{":pk":{"S":"USER#123"},":prefix":{"S":"ORDER#"}}'
|
|
60
|
-
})
|
|
61
|
-
|
|
62
|
-
# Query GSI
|
|
63
|
-
aws({
|
|
64
|
-
command: "dynamodb_query",
|
|
65
|
-
tableName: "MyTable",
|
|
66
|
-
indexName: "gsi1",
|
|
67
|
-
keyConditionExpression: "gsi1pk = :status",
|
|
68
|
-
expressionAttributeValues: '{":status":{"S":"ORDER#pending"}}'
|
|
69
|
-
})
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
## Get Single Item
|
|
73
|
-
|
|
74
|
-
Retrieve a specific item by its full primary key:
|
|
75
|
-
|
|
76
|
-
```
|
|
77
|
-
# Simple key
|
|
78
|
-
aws({
|
|
79
|
-
command: "dynamodb_get_item",
|
|
80
|
-
tableName: "MyTable",
|
|
81
|
-
key: '{"pk":{"S":"USER#123"}}'
|
|
82
|
-
})
|
|
83
|
-
|
|
84
|
-
# Composite key (partition + sort)
|
|
85
|
-
aws({
|
|
86
|
-
command: "dynamodb_get_item",
|
|
87
|
-
tableName: "MyTable",
|
|
88
|
-
key: '{"pk":{"S":"USER#123"},"sk":{"S":"PROFILE"}}'
|
|
89
|
-
})
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
## Scan Table
|
|
93
|
-
|
|
94
|
-
Full table scan - use sparingly on large tables:
|
|
95
|
-
|
|
96
|
-
```
|
|
97
|
-
# Scan all items
|
|
98
|
-
aws({ command: "dynamodb_scan", tableName: "MyTable" })
|
|
99
|
-
|
|
100
|
-
# With filter (applied after scan, not efficient for filtering)
|
|
101
|
-
aws({
|
|
102
|
-
command: "dynamodb_scan",
|
|
103
|
-
tableName: "MyTable",
|
|
104
|
-
filterExpression: "status = :status",
|
|
105
|
-
expressionAttributeValues: '{":status":{"S":"active"}}'
|
|
106
|
-
})
|
|
107
|
-
|
|
108
|
-
# Limit results
|
|
109
|
-
aws({ command: "dynamodb_scan", tableName: "MyTable", limit: 10 })
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
## DynamoDB Attribute Format
|
|
113
|
-
|
|
114
|
-
All values use DynamoDB's attribute value format:
|
|
115
|
-
|
|
116
|
-
| Type | Format | Example |
|
|
117
|
-
|------|--------|---------|
|
|
118
|
-
| String | `{"S": "value"}` | `{"S": "USER#123"}` |
|
|
119
|
-
| Number | `{"N": "123"}` | `{"N": "99.99"}` |
|
|
120
|
-
| Boolean | `{"BOOL": true}` | `{"BOOL": false}` |
|
|
121
|
-
| List | `{"L": [...]}` | `{"L": [{"S": "a"}, {"S": "b"}]}` |
|
|
122
|
-
| Map | `{"M": {...}}` | `{"M": {"name": {"S": "John"}}}` |
|
|
123
|
-
| Null | `{"NULL": true}` | `{"NULL": true}` |
|
|
124
|
-
|
|
125
|
-
## Common Patterns
|
|
126
|
-
|
|
127
|
-
### Get User Profile
|
|
128
|
-
|
|
129
|
-
```
|
|
130
|
-
aws({
|
|
131
|
-
command: "dynamodb_get_item",
|
|
132
|
-
tableName: "DataTable",
|
|
133
|
-
key: '{"pk":{"S":"USER#123"},"sk":{"S":"PROFILE"}}'
|
|
134
|
-
})
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
### List User Orders
|
|
138
|
-
|
|
139
|
-
```
|
|
140
|
-
aws({
|
|
141
|
-
command: "dynamodb_query",
|
|
142
|
-
tableName: "DataTable",
|
|
143
|
-
keyConditionExpression: "pk = :pk AND begins_with(sk, :prefix)",
|
|
144
|
-
expressionAttributeValues: '{":pk":{"S":"USER#123"},":prefix":{"S":"ORDER#"}}'
|
|
145
|
-
})
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
### Find Pending Orders (via GSI)
|
|
149
|
-
|
|
150
|
-
```
|
|
151
|
-
aws({
|
|
152
|
-
command: "dynamodb_query",
|
|
153
|
-
tableName: "DataTable",
|
|
154
|
-
indexName: "gsi1",
|
|
155
|
-
keyConditionExpression: "gsi1pk = :status",
|
|
156
|
-
expressionAttributeValues: '{":status":{"S":"ORDER#pending"}}'
|
|
157
|
-
})
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
### Check Table Schema
|
|
161
|
-
|
|
162
|
-
```
|
|
163
|
-
aws({ command: "dynamodb_describe_table", tableName: "DataTable" })
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
## Profile and Region
|
|
167
|
-
|
|
168
|
-
All DynamoDB commands support profile and region options:
|
|
169
|
-
|
|
170
|
-
```
|
|
171
|
-
aws({
|
|
172
|
-
command: "dynamodb_query",
|
|
173
|
-
tableName: "MyTable",
|
|
174
|
-
profile: "production",
|
|
175
|
-
region: "us-west-2",
|
|
176
|
-
keyConditionExpression: "pk = :pk",
|
|
177
|
-
expressionAttributeValues: '{":pk":{"S":"USER#123"}}'
|
|
178
|
-
})
|
|
179
|
-
```
|
package/skills/tools-llm.md
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: LLM MCP tool for debugging provider responses
|
|
3
|
-
related: llm, tools
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# LLM MCP Tool
|
|
7
|
-
|
|
8
|
-
Debug and inspect LLM provider responses. Useful for understanding how providers format responses and troubleshooting API integrations.
|
|
9
|
-
|
|
10
|
-
## Usage
|
|
11
|
-
|
|
12
|
-
All parameters are passed at the top level (flat structure):
|
|
13
|
-
|
|
14
|
-
```
|
|
15
|
-
llm() # Show help
|
|
16
|
-
llm({ command: "...", ...params }) # Execute a command
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Commands
|
|
20
|
-
|
|
21
|
-
| Command | Description |
|
|
22
|
-
|---------|-------------|
|
|
23
|
-
| `validate` | Check which API keys are configured |
|
|
24
|
-
| `debug_call` | Make a debug call to an LLM provider |
|
|
25
|
-
|
|
26
|
-
## Validation
|
|
27
|
-
|
|
28
|
-
Check which LLM provider API keys are configured without making API calls:
|
|
29
|
-
|
|
30
|
-
```
|
|
31
|
-
llm({ command: "validate" })
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
Returns:
|
|
35
|
-
- `providers` - Status for each provider: anthropic, google, openai, openrouter, xai
|
|
36
|
-
- `availableCount` - Number of providers with API keys configured
|
|
37
|
-
- `totalProviders` - Total number of supported providers (5)
|
|
38
|
-
- `success` - true if at least one provider is available
|
|
39
|
-
|
|
40
|
-
## Debug Call
|
|
41
|
-
|
|
42
|
-
Make a test call to inspect the raw response:
|
|
43
|
-
|
|
44
|
-
```
|
|
45
|
-
llm({ command: "debug_call", provider: "openai", message: "Hello, world!" })
|
|
46
|
-
llm({ command: "debug_call", provider: "anthropic", message: "Hello, world!" })
|
|
47
|
-
llm({ command: "debug_call", provider: "openai", model: "o3-mini", message: "What is 15 * 17?" })
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## Parameters
|
|
51
|
-
|
|
52
|
-
All parameters are passed at the top level (flat structure):
|
|
53
|
-
|
|
54
|
-
| Parameter | Type | Description |
|
|
55
|
-
|-----------|------|-------------|
|
|
56
|
-
| `command` | string | Command to execute (omit for help) |
|
|
57
|
-
| `provider` | string | LLM provider: anthropic, google, openai, openrouter, xai |
|
|
58
|
-
| `message` | string | Message to send to the LLM provider |
|
|
59
|
-
| `model` | string | Model to use (provider-specific, e.g., gpt-4, claude-3-sonnet) |
|
|
60
|
-
|
|
61
|
-
## Response Fields
|
|
62
|
-
|
|
63
|
-
| Field | Description |
|
|
64
|
-
|-------|-------------|
|
|
65
|
-
| `content` | The response text |
|
|
66
|
-
| `reasoning` | Extracted reasoning/thinking content (if available) |
|
|
67
|
-
| `reasoningTokens` | Count of reasoning tokens used |
|
|
68
|
-
| `history` | Full conversation history |
|
|
69
|
-
| `rawResponses` | Raw API responses for debugging |
|
|
70
|
-
| `usage` | Token usage statistics |
|
|
71
|
-
|
|
72
|
-
## Environment Variables
|
|
73
|
-
|
|
74
|
-
| Variable | Description |
|
|
75
|
-
|----------|-------------|
|
|
76
|
-
| `OPENAI_API_KEY` | OpenAI API key |
|
|
77
|
-
| `ANTHROPIC_API_KEY` | Anthropic API key |
|
|
78
|
-
| `GOOGLE_API_KEY` or `GEMINI_API_KEY` | Google/Gemini API key |
|
|
79
|
-
| `OPENROUTER_API_KEY` | OpenRouter API key |
|
|
80
|
-
| `XAI_API_KEY` | xAI (Grok) API key |
|
|
81
|
-
|
|
82
|
-
## Supported Providers
|
|
83
|
-
|
|
84
|
-
| Provider | Models |
|
|
85
|
-
|----------|--------|
|
|
86
|
-
| `anthropic` | claude-sonnet-4-20250514, claude-opus-4-20250514, etc. |
|
|
87
|
-
| `gemini` | gemini-2.0-flash, gemini-1.5-pro, etc. |
|
|
88
|
-
| `openai` | gpt-4o, gpt-4o-mini, o1, o3-mini, etc. |
|
|
89
|
-
| `openrouter` | Access to multiple providers |
|
|
90
|
-
| `xai` | grok-4-1-fast-reasoning, grok-3, grok-3-mini |
|
|
91
|
-
|
|
92
|
-
## Common Patterns
|
|
93
|
-
|
|
94
|
-
### Compare Provider Responses
|
|
95
|
-
|
|
96
|
-
```
|
|
97
|
-
llm({ command: "debug_call", provider: "openai", message: "Explain recursion briefly" })
|
|
98
|
-
llm({ command: "debug_call", provider: "anthropic", message: "Explain recursion briefly" })
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
### Test Reasoning Models
|
|
102
|
-
|
|
103
|
-
```
|
|
104
|
-
llm({ command: "debug_call", provider: "openai", model: "o3-mini", message: "Solve: If 3x + 5 = 14, what is x?" })
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
### Check Token Usage
|
|
108
|
-
|
|
109
|
-
Use `debug_call` to inspect the `usage` field for token consumption analysis.
|