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 +5 -8
- package/build/index.js +5 -7
- package/build/server.js +5 -7
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -1,22 +1,18 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<img src="./assets/portkey-balloon-spin-light.webp" alt="Portkey Admin MCP icon" width="180" height="180">
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://readme-typing-svg.demolab.com?font=Fira+Code&pause=1000&color=FFFFFF¢er=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¢er=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¢er=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%
|
|
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
|
-
|
|
15
|
+
[](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
|
|
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(
|
|
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 (
|
|
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
|
|
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(
|
|
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 (
|
|
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": ">=
|
|
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.
|
|
46
|
+
"version": "0.4.0",
|
|
46
47
|
"main": "build/index.js",
|
|
47
48
|
"keywords": [
|
|
48
49
|
"mcp",
|