@loxtep/customer-mcp-server 1.0.4 → 1.0.5
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 +18 -2
- package/dist/index.js +19 -5
- package/dist/index.js.map +1 -1
- package/dist/sign.d.ts +16 -0
- package/dist/sign.d.ts.map +1 -0
- package/dist/sign.js +79 -0
- package/dist/sign.js.map +1 -0
- package/package.json +4 -1
package/README.md
CHANGED
|
@@ -6,11 +6,27 @@ tokens.
|
|
|
6
6
|
|
|
7
7
|
## Prerequisites
|
|
8
8
|
|
|
9
|
-
- **Role:** Your account must have `owner`, `
|
|
10
|
-
`ai:mcp_tools` permission is
|
|
9
|
+
- **Role:** Your account must have `owner`, `org_admin`, or `developer` role. The
|
|
10
|
+
`ai:mcp_tools` permission is granted to those roles. If you get 403
|
|
11
11
|
errors, contact your organization owner.
|
|
12
12
|
- Node.js 18+.
|
|
13
13
|
|
|
14
|
+
## Authentication (Bearer vs SigV4)
|
|
15
|
+
|
|
16
|
+
The server sends your JWT to the Loxtep API in one of two ways:
|
|
17
|
+
|
|
18
|
+
- **SigV4 + JWT (recommended when API is IAM-secured):** If **AWS credentials** are
|
|
19
|
+
available (e.g. `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, or the default
|
|
20
|
+
credential chain), the server **signs** the request with AWS Signature V4 and
|
|
21
|
+
sends the JWT in the `x-jwt-token` header. Use this when the Loxtep API is
|
|
22
|
+
behind API Gateway with IAM (`secure: true`); otherwise the gateway returns 403
|
|
23
|
+
before your role is checked.
|
|
24
|
+
- **Bearer only:** If no AWS credentials are found, the server sends
|
|
25
|
+
`Authorization: Bearer <your-jwt>`. This works when the API does not require
|
|
26
|
+
IAM (e.g. a proxy or non-IAM deployment).
|
|
27
|
+
|
|
28
|
+
Optional: `LOXTEP_AWS_REGION` or `AWS_REGION` (default `us-east-1`) for SigV4.
|
|
29
|
+
|
|
14
30
|
## Quickstart
|
|
15
31
|
|
|
16
32
|
### 1. Login (one-time setup)
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,7 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
|
|
|
4
4
|
import { CallToolRequestSchema, ListToolsRequestSchema, InitializeRequestSchema, PingRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
5
5
|
import { getTools } from './tools.js';
|
|
6
6
|
import { loadTokens, isAccessExpired, refreshAccess, writeTokenFile, } from './auth.js';
|
|
7
|
+
import { signRequest } from './sign.js';
|
|
7
8
|
const DEBUG = process.env.MCP_DEBUG === '1' || process.env.MCP_DEBUG === 'true';
|
|
8
9
|
function log(msg, data) {
|
|
9
10
|
if (DEBUG) {
|
|
@@ -40,13 +41,26 @@ async function ensureValidTokens() {
|
|
|
40
41
|
}
|
|
41
42
|
async function callToolApi(apiBaseUrl, accessToken, name, args) {
|
|
42
43
|
const url = `${apiBaseUrl.replace(/\/$/, '')}/ai/mcp/tools/call`;
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
const body = JSON.stringify({ name, arguments: args ?? {} });
|
|
45
|
+
let headers;
|
|
46
|
+
const signed = await signRequest('POST', url, {
|
|
47
|
+
'content-type': 'application/json',
|
|
48
|
+
'x-jwt-token': accessToken,
|
|
49
|
+
}, body);
|
|
50
|
+
if (signed) {
|
|
51
|
+
headers = signed;
|
|
52
|
+
log('Using SigV4 + x-jwt-token');
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
headers = {
|
|
46
56
|
'Content-Type': 'application/json',
|
|
47
57
|
Authorization: `Bearer ${accessToken}`,
|
|
48
|
-
}
|
|
49
|
-
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const res = await fetch(url, {
|
|
61
|
+
method: 'POST',
|
|
62
|
+
headers,
|
|
63
|
+
body,
|
|
50
64
|
});
|
|
51
65
|
if (res.status === 401) {
|
|
52
66
|
throw new Error('Unauthorized (token expired or invalid). Run `npx @loxtep/customer-mcp-server login` again.');
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,0BAA0B,EAC1B,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EACL,UAAU,EACV,eAAe,EACf,aAAa,EACb,cAAc,GAGf,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/sign.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional AWS SigV4 signing for MCP tool API calls.
|
|
3
|
+
* When the Loxtep API is behind API Gateway with IAM (secure: true), requests must be
|
|
4
|
+
* signed. We send the JWT in x-jwt-token so the Lambda can perform RBAC.
|
|
5
|
+
* When AWS credentials are not available, callers use Bearer token only.
|
|
6
|
+
*/
|
|
7
|
+
export interface SignedHeaders {
|
|
8
|
+
[key: string]: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Try to sign a request with SigV4. Returns null if credentials are unavailable.
|
|
12
|
+
* When non-null, the caller must send these headers (including x-jwt-token) and must NOT
|
|
13
|
+
* send Authorization: Bearer (API Gateway expects SigV4 in Authorization).
|
|
14
|
+
*/
|
|
15
|
+
export declare function signRequest(method: string, url: string, headers: Record<string, string>, body?: string): Promise<SignedHeaders | null>;
|
|
16
|
+
//# sourceMappingURL=sign.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sign.d.ts","sourceRoot":"","sources":["../src/sign.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA+D/B"}
|
package/dist/sign.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional AWS SigV4 signing for MCP tool API calls.
|
|
3
|
+
* When the Loxtep API is behind API Gateway with IAM (secure: true), requests must be
|
|
4
|
+
* signed. We send the JWT in x-jwt-token so the Lambda can perform RBAC.
|
|
5
|
+
* When AWS credentials are not available, callers use Bearer token only.
|
|
6
|
+
*/
|
|
7
|
+
import { SignatureV4 } from '@smithy/signature-v4';
|
|
8
|
+
import { Sha256 } from '@aws-crypto/sha256-js';
|
|
9
|
+
import { defaultProvider } from '@aws-sdk/credential-provider-node';
|
|
10
|
+
const region = process.env.LOXTEP_AWS_REGION || process.env.AWS_REGION || 'us-east-1';
|
|
11
|
+
const service = 'execute-api';
|
|
12
|
+
/**
|
|
13
|
+
* Try to sign a request with SigV4. Returns null if credentials are unavailable.
|
|
14
|
+
* When non-null, the caller must send these headers (including x-jwt-token) and must NOT
|
|
15
|
+
* send Authorization: Bearer (API Gateway expects SigV4 in Authorization).
|
|
16
|
+
*/
|
|
17
|
+
export async function signRequest(method, url, headers, body) {
|
|
18
|
+
try {
|
|
19
|
+
const credentials = await defaultProvider()();
|
|
20
|
+
if (!credentials?.accessKeyId || !credentials?.secretAccessKey) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
const parsedUrl = new URL(url);
|
|
24
|
+
const requestHeaders = {
|
|
25
|
+
host: parsedUrl.host,
|
|
26
|
+
'content-type': headers['content-type'] || 'application/json',
|
|
27
|
+
...headers,
|
|
28
|
+
};
|
|
29
|
+
const signer = new SignatureV4({
|
|
30
|
+
credentials: {
|
|
31
|
+
accessKeyId: credentials.accessKeyId,
|
|
32
|
+
secretAccessKey: credentials.secretAccessKey,
|
|
33
|
+
sessionToken: credentials.sessionToken,
|
|
34
|
+
},
|
|
35
|
+
region,
|
|
36
|
+
service,
|
|
37
|
+
sha256: Sha256,
|
|
38
|
+
applyChecksum: false,
|
|
39
|
+
uriEscapePath: true,
|
|
40
|
+
});
|
|
41
|
+
const query = {};
|
|
42
|
+
for (const [key, value] of parsedUrl.searchParams.entries()) {
|
|
43
|
+
const existing = query[key];
|
|
44
|
+
if (existing === undefined) {
|
|
45
|
+
query[key] = value;
|
|
46
|
+
}
|
|
47
|
+
else if (Array.isArray(existing)) {
|
|
48
|
+
existing.push(value);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
query[key] = [existing, value];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const signed = await signer.sign({
|
|
55
|
+
method,
|
|
56
|
+
hostname: parsedUrl.hostname,
|
|
57
|
+
path: parsedUrl.pathname,
|
|
58
|
+
protocol: 'https:',
|
|
59
|
+
query: query,
|
|
60
|
+
headers: requestHeaders,
|
|
61
|
+
body,
|
|
62
|
+
});
|
|
63
|
+
const out = {};
|
|
64
|
+
for (const [key, value] of Object.entries(signed.headers)) {
|
|
65
|
+
if (value != null && key.toLowerCase() !== 'x-amz-content-sha256') {
|
|
66
|
+
out[key] = Array.isArray(value) ? value.join(',') : String(value);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Preserve x-jwt-token in output (signer may have normalized header names)
|
|
70
|
+
if (headers['x-jwt-token']) {
|
|
71
|
+
out['x-jwt-token'] = headers['x-jwt-token'];
|
|
72
|
+
}
|
|
73
|
+
return out;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=sign.js.map
|
package/dist/sign.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sign.js","sourceRoot":"","sources":["../src/sign.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loxtep/customer-mcp-server",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "Customer MCP proxy: login via app UI, stdio server that forwards tool calls to Loxtep API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -19,7 +19,10 @@
|
|
|
19
19
|
"author": "Loxtep Team",
|
|
20
20
|
"license": "MIT",
|
|
21
21
|
"dependencies": {
|
|
22
|
+
"@aws-crypto/sha256-js": "^5.2.0",
|
|
23
|
+
"@aws-sdk/credential-provider-node": "^3.700.0",
|
|
22
24
|
"@modelcontextprotocol/sdk": "^1.15.1",
|
|
25
|
+
"@smithy/signature-v4": "^5.3.5",
|
|
23
26
|
"express": "^4.21.0",
|
|
24
27
|
"jsonwebtoken": "^9.0.2",
|
|
25
28
|
"open": "^10.0.0"
|