portkey-admin-mcp 0.3.8 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,22 +1,18 @@
1
1
  <div align="center">
2
2
 
3
- # Portkey Admin MCP Server
3
+ <img src="./assets/portkey-balloon-spin-light.webp" alt="Portkey Admin MCP icon" width="180" height="180">
4
4
 
5
- <picture>
6
- <source media="(prefers-color-scheme: dark)" srcset="https://readme-typing-svg.demolab.com?font=Fira+Code&pause=1000&color=FFFFFF&center=true&vCenter=true&width=500&lines=150+tools+for+Portkey+Admin+API;Prompts%2C+Configs%2C+Analytics;Full+MCP+Protocol+1.0+Server">
7
- <source media="(prefers-color-scheme: light)" srcset="https://readme-typing-svg.demolab.com?font=Fira+Code&pause=1000&color=000000&center=true&vCenter=true&width=500&lines=150+tools+for+Portkey+Admin+API;Prompts%2C+Configs%2C+Analytics;Full+MCP+Protocol+1.0+Server">
8
- <img src="https://readme-typing-svg.demolab.com?font=Fira+Code&pause=1000&color=000000&center=true&vCenter=true&width=500&lines=150+tools+for+Portkey+Admin+API;Prompts%2C+Configs%2C+Analytics;Full+MCP+Protocol+1.0+Server" alt="Typing SVG">
9
- </picture>
5
+ # Portkey Admin MCP Server
10
6
 
11
7
  MCP server for the [Portkey](https://portkey.ai/) Admin API. Manage prompts, configs, analytics, API keys, and more from any MCP client.
12
8
 
13
9
  <a href="https://www.npmjs.com/package/portkey-admin-mcp"><img src="https://img.shields.io/npm/v/portkey-admin-mcp.svg" alt="npm version"></a>
14
10
  <a href="https://www.npmjs.com/package/portkey-admin-mcp"><img src="https://img.shields.io/npm/dm/portkey-admin-mcp.svg" alt="npm downloads"></a>
15
11
  <a href="https://github.com/CodesWhat/portkey-admin-mcp/actions/workflows/ci.yml"><img src="https://github.com/CodesWhat/portkey-admin-mcp/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
16
- <a href="https://nodejs.org/"><img src="https://img.shields.io/badge/node-%3E%3D20-brightgreen.svg" alt="Node.js"></a>
12
+ <a href="https://nodejs.org/"><img src="https://img.shields.io/badge/node-%3E%3D24-brightgreen.svg" alt="Node.js"></a>
17
13
  <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a>
18
14
  <a href="https://github.com/punkpeye/awesome-mcp-servers"><img src="https://awesome.re/mentioned-badge.svg" alt="Mentioned in Awesome MCP Servers"></a>
19
- <a href="https://lobehub.com/mcp/codeswhat-portkey-admin-mcp"><img src="https://lobehub.com/badge/mcp/codeswhat-portkey-admin-mcp?style=flat" alt="MCP Badge"></a>
15
+ [![MCP Badge](https://lobehub.com/badge/mcp-full/codeswhat-portkey-admin-mcp?theme=light)](https://lobehub.com/mcp/codeswhat-portkey-admin-mcp)
20
16
 
21
17
  <a href="https://glama.ai/mcp/servers/CodesWhat/portkey-admin-mcp"><img src="https://glama.ai/mcp/servers/CodesWhat/portkey-admin-mcp/badges/card.svg" alt="portkey-admin-mcp MCP server"></a>
22
18
 
@@ -220,6 +216,7 @@ Key points:
220
216
  docker build -t portkey-admin-mcp .
221
217
  docker run \
222
218
  -e PORTKEY_API_KEY=your_key \
219
+ -e MCP_TRANSPORT=http \
223
220
  -e MCP_HOST=0.0.0.0 \
224
221
  -e MCP_PORT=3000 \
225
222
  -e MCP_AUTH_MODE=bearer \
package/build/index.js CHANGED
@@ -2797,7 +2797,7 @@ function registerConfigsTools(server, service) {
2797
2797
  );
2798
2798
  server.tool(
2799
2799
  "update_config",
2800
- "Update a config by slug and create a new version. Only provided fields change; name and status are editable, while the slug stays fixed. Use list_config_versions if you need history first.",
2800
+ "Update a config by slug and create a new version. Only provided fields change; name, status, and all routing/cache/retry settings (cache_mode, cache_max_age, retry_attempts, retry_on_status_codes, strategy_mode, targets) are editable, while the slug stays fixed. Use list_config_versions if you need history first.",
2801
2801
  CONFIGS_TOOL_SCHEMAS.updateConfig,
2802
2802
  async (params) => {
2803
2803
  const config = buildConfigPayload(params);
@@ -2897,7 +2897,7 @@ var GUARDRAILS_TOOL_SCHEMAS = {
2897
2897
  listGuardrails: {
2898
2898
  workspace_id: z5.string().optional().describe("Filter guardrails by workspace ID"),
2899
2899
  organisation_id: z5.string().optional().describe("Filter guardrails by organization ID"),
2900
- page_size: z5.coerce.number().min(1).max(1e3).optional().describe("Number of items per page (1-1000, default: 100)"),
2900
+ page_size: z5.coerce.number().min(1).max(100).optional().describe("Number of items per page (1-100, default: 100)"),
2901
2901
  current_page: z5.coerce.number().positive().optional().describe("Page number for pagination")
2902
2902
  },
2903
2903
  getGuardrail: {
@@ -3323,7 +3323,7 @@ function registerIntegrationsTools(server, service) {
3323
3323
  );
3324
3324
  server.tool(
3325
3325
  "update_integration",
3326
- "Update an integration's name, key, or provider-specific config. Key and config changes take effect immediately and can disrupt dependent providers or live requests.",
3326
+ "Update an integration's name, key, or provider-specific config. Key and config changes take effect immediately and can disrupt dependent providers or live requests. Model provisioning and workspace access are managed separately via update_integration_models and update_integration_workspaces.",
3327
3327
  INTEGRATIONS_TOOL_SCHEMAS.updateIntegration,
3328
3328
  async (params) => {
3329
3329
  const result = await service.integrations.updateIntegration(params.slug, {
@@ -6891,7 +6891,7 @@ var USERS_TOOL_SCHEMAS = {
6891
6891
  cost_max: z18.coerce.number().positive().optional().describe("Maximum cost in cents to filter by"),
6892
6892
  status_code: z18.string().optional().describe("Filter by specific HTTP status codes (comma-separated)"),
6893
6893
  virtual_keys: z18.string().optional().describe("Filter by specific virtual key slugs (comma-separated)"),
6894
- page_size: z18.coerce.number().positive().optional().describe("Number of results per page (for pagination)")
6894
+ page_size: z18.coerce.number().positive().max(100).optional().describe("Number of results per page (max 100)")
6895
6895
  },
6896
6896
  getUser: {
6897
6897
  user_id: z18.string().describe("The user ID to retrieve")
@@ -7145,9 +7145,7 @@ function registerUsersTools(server, service) {
7145
7145
  import { z as z19 } from "zod";
7146
7146
  var WORKSPACES_TOOL_SCHEMAS = {
7147
7147
  listWorkspaces: {
7148
- page_size: z19.coerce.number().positive().optional().describe(
7149
- "Number of workspaces to return per page (default varies by endpoint)"
7150
- ),
7148
+ page_size: z19.coerce.number().positive().max(100).optional().describe("Number of workspaces to return per page (max 100)"),
7151
7149
  current_page: z19.coerce.number().positive().optional().describe("Page number to retrieve when results are paginated")
7152
7150
  },
7153
7151
  getWorkspace: {
package/build/server.js CHANGED
@@ -2811,7 +2811,7 @@ function registerConfigsTools(server, service) {
2811
2811
  );
2812
2812
  server.tool(
2813
2813
  "update_config",
2814
- "Update a config by slug and create a new version. Only provided fields change; name and status are editable, while the slug stays fixed. Use list_config_versions if you need history first.",
2814
+ "Update a config by slug and create a new version. Only provided fields change; name, status, and all routing/cache/retry settings (cache_mode, cache_max_age, retry_attempts, retry_on_status_codes, strategy_mode, targets) are editable, while the slug stays fixed. Use list_config_versions if you need history first.",
2815
2815
  CONFIGS_TOOL_SCHEMAS.updateConfig,
2816
2816
  async (params) => {
2817
2817
  const config = buildConfigPayload(params);
@@ -2911,7 +2911,7 @@ var GUARDRAILS_TOOL_SCHEMAS = {
2911
2911
  listGuardrails: {
2912
2912
  workspace_id: z5.string().optional().describe("Filter guardrails by workspace ID"),
2913
2913
  organisation_id: z5.string().optional().describe("Filter guardrails by organization ID"),
2914
- page_size: z5.coerce.number().min(1).max(1e3).optional().describe("Number of items per page (1-1000, default: 100)"),
2914
+ page_size: z5.coerce.number().min(1).max(100).optional().describe("Number of items per page (1-100, default: 100)"),
2915
2915
  current_page: z5.coerce.number().positive().optional().describe("Page number for pagination")
2916
2916
  },
2917
2917
  getGuardrail: {
@@ -3337,7 +3337,7 @@ function registerIntegrationsTools(server, service) {
3337
3337
  );
3338
3338
  server.tool(
3339
3339
  "update_integration",
3340
- "Update an integration's name, key, or provider-specific config. Key and config changes take effect immediately and can disrupt dependent providers or live requests.",
3340
+ "Update an integration's name, key, or provider-specific config. Key and config changes take effect immediately and can disrupt dependent providers or live requests. Model provisioning and workspace access are managed separately via update_integration_models and update_integration_workspaces.",
3341
3341
  INTEGRATIONS_TOOL_SCHEMAS.updateIntegration,
3342
3342
  async (params) => {
3343
3343
  const result = await service.integrations.updateIntegration(params.slug, {
@@ -6905,7 +6905,7 @@ var USERS_TOOL_SCHEMAS = {
6905
6905
  cost_max: z18.coerce.number().positive().optional().describe("Maximum cost in cents to filter by"),
6906
6906
  status_code: z18.string().optional().describe("Filter by specific HTTP status codes (comma-separated)"),
6907
6907
  virtual_keys: z18.string().optional().describe("Filter by specific virtual key slugs (comma-separated)"),
6908
- page_size: z18.coerce.number().positive().optional().describe("Number of results per page (for pagination)")
6908
+ page_size: z18.coerce.number().positive().max(100).optional().describe("Number of results per page (max 100)")
6909
6909
  },
6910
6910
  getUser: {
6911
6911
  user_id: z18.string().describe("The user ID to retrieve")
@@ -7159,9 +7159,7 @@ function registerUsersTools(server, service) {
7159
7159
  import { z as z19 } from "zod";
7160
7160
  var WORKSPACES_TOOL_SCHEMAS = {
7161
7161
  listWorkspaces: {
7162
- page_size: z19.coerce.number().positive().optional().describe(
7163
- "Number of workspaces to return per page (default varies by endpoint)"
7164
- ),
7162
+ page_size: z19.coerce.number().positive().max(100).optional().describe("Number of workspaces to return per page (max 100)"),
7165
7163
  current_page: z19.coerce.number().positive().optional().describe("Page number to retrieve when results are paginated")
7166
7164
  },
7167
7165
  getWorkspace: {
package/package.json CHANGED
@@ -22,11 +22,12 @@
22
22
  "knip": "knip",
23
23
  "ci": "npm run lint && npm run knip && npm run typecheck && npm run test && npm run build && npm run test:e2e && npm run verify:readme-tools",
24
24
  "start:http": "node build/server.js",
25
+ "publish:lobehub": "npx -y @lobehub/market-cli plugin publish --dir \"$PWD\"",
25
26
  "prepare": "[ -n \"$CI\" ] || [ -f /.dockerenv ] || [ ! -d .git ] || lefthook install",
26
27
  "prepublishOnly": "npm run ci"
27
28
  },
28
29
  "engines": {
29
- "node": ">=20"
30
+ "node": ">=24"
30
31
  },
31
32
  "files": [
32
33
  "build"
@@ -42,7 +43,7 @@
42
43
  },
43
44
  "name": "portkey-admin-mcp",
44
45
  "mcpName": "io.github.CodesWhat/portkey-admin-mcp",
45
- "version": "0.3.8",
46
+ "version": "0.4.0",
46
47
  "main": "build/index.js",
47
48
  "keywords": [
48
49
  "mcp",