@jaypie/mcp 0.7.46 → 0.8.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 (41) hide show
  1. package/dist/suite.d.ts +1 -3
  2. package/dist/suite.js +1 -9
  3. package/dist/suite.js.map +1 -1
  4. package/dist/suites/docs/index.js +2 -9
  5. package/dist/suites/docs/index.js.map +1 -1
  6. package/package.json +1 -2
  7. package/release-notes/constructs/1.2.36.md +9 -0
  8. package/release-notes/llm/1.2.20.md +10 -0
  9. package/release-notes/mcp/0.8.0.md +21 -0
  10. package/skills/agents.md +4 -3
  11. package/skills/aws.md +1 -6
  12. package/skills/contents.md +1 -1
  13. package/skills/datadog.md +3 -3
  14. package/skills/dynamodb.md +1 -6
  15. package/skills/fabric.md +1 -1
  16. package/skills/llm.md +1 -0
  17. package/skills/{tools-datadog.md → mcp-datadog.md} +4 -4
  18. package/skills/mcp.md +63 -0
  19. package/skills/meta.md +3 -3
  20. package/skills/practice.md +10 -0
  21. package/skills/skills.md +2 -2
  22. package/skills/tildeskill.md +1 -1
  23. package/skills/tools.md +170 -85
  24. package/dist/suites/aws/aws.d.ts +0 -207
  25. package/dist/suites/aws/aws.js +0 -369
  26. package/dist/suites/aws/aws.js.map +0 -1
  27. package/dist/suites/aws/help.md +0 -87
  28. package/dist/suites/aws/index.d.ts +0 -68
  29. package/dist/suites/aws/index.js +0 -397
  30. package/dist/suites/aws/index.js.map +0 -1
  31. package/dist/suites/llm/help.md +0 -58
  32. package/dist/suites/llm/index.d.ts +0 -2
  33. package/dist/suites/llm/index.js +0 -77
  34. package/dist/suites/llm/index.js.map +0 -1
  35. package/dist/suites/llm/llm.d.ts +0 -53
  36. package/dist/suites/llm/llm.js +0 -111
  37. package/dist/suites/llm/llm.js.map +0 -1
  38. package/skills/index.md +0 -18
  39. package/skills/tools-aws.md +0 -208
  40. package/skills/tools-dynamodb.md +0 -179
  41. package/skills/tools-llm.md +0 -109
@@ -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 |
@@ -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
- ```
@@ -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
- ```
@@ -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.