@ninomae/mcp-app-server 0.1.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.
Files changed (49) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/LICENSE +21 -0
  3. package/README.md +262 -0
  4. package/README.zh-CN.md +204 -0
  5. package/dist/identity.d.ts +27 -0
  6. package/dist/identity.d.ts.map +1 -0
  7. package/dist/identity.js +62 -0
  8. package/dist/identity.js.map +1 -0
  9. package/dist/index.d.ts +33 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +134 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/mcp.d.ts +64 -0
  14. package/dist/mcp.d.ts.map +1 -0
  15. package/dist/mcp.js +76 -0
  16. package/dist/mcp.js.map +1 -0
  17. package/dist/oauth.d.ts +33 -0
  18. package/dist/oauth.d.ts.map +1 -0
  19. package/dist/oauth.js +338 -0
  20. package/dist/oauth.js.map +1 -0
  21. package/dist/rate-limit.d.ts +20 -0
  22. package/dist/rate-limit.d.ts.map +1 -0
  23. package/dist/rate-limit.js +29 -0
  24. package/dist/rate-limit.js.map +1 -0
  25. package/dist/react.d.ts +36 -0
  26. package/dist/react.d.ts.map +1 -0
  27. package/dist/react.js +73 -0
  28. package/dist/react.js.map +1 -0
  29. package/dist/sql.d.ts +27 -0
  30. package/dist/sql.d.ts.map +1 -0
  31. package/dist/sql.js +107 -0
  32. package/dist/sql.js.map +1 -0
  33. package/dist/store.d.ts +106 -0
  34. package/dist/store.d.ts.map +1 -0
  35. package/dist/store.js +122 -0
  36. package/dist/store.js.map +1 -0
  37. package/dist/tokens.d.ts +26 -0
  38. package/dist/tokens.d.ts.map +1 -0
  39. package/dist/tokens.js +61 -0
  40. package/dist/tokens.js.map +1 -0
  41. package/dist/types.d.ts +152 -0
  42. package/dist/types.d.ts.map +1 -0
  43. package/dist/types.js +13 -0
  44. package/dist/types.js.map +1 -0
  45. package/dist/util.d.ts +9 -0
  46. package/dist/util.d.ts.map +1 -0
  47. package/dist/util.js +48 -0
  48. package/dist/util.js.map +1 -0
  49. package/package.json +96 -0
package/dist/util.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ export declare function json(body: unknown, status?: number, headers?: Record<string, string>): Response;
2
+ export declare function sha256Hex(raw: string): Promise<string>;
3
+ export declare function base64url(bytes: Uint8Array): string;
4
+ export declare function randomSecret(prefix?: string): string;
5
+ export declare const str: (value: unknown) => string;
6
+ export declare const nowIso: () => string;
7
+ export declare function parseJsonList(raw: string | null | undefined): string[];
8
+ export declare function readBody(request: Request): Promise<Record<string, unknown>>;
9
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,wBAAgB,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,SAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,YAKrF;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,mBAG1C;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,UAI1C;AAED,wBAAgB,YAAY,CAAC,MAAM,SAAK,UAEvC;AAED,eAAO,MAAM,GAAG,GAAI,OAAO,OAAO,WAAoD,CAAC;AAEvF,eAAO,MAAM,MAAM,cAAiC,CAAC;AAErD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CAOtE;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAWjF"}
package/dist/util.js ADDED
@@ -0,0 +1,48 @@
1
+ export function json(body, status = 200, headers = {}) {
2
+ return new Response(JSON.stringify(body), {
3
+ status,
4
+ headers: { 'content-type': 'application/json; charset=utf-8', 'cache-control': 'no-store', pragma: 'no-cache', ...headers },
5
+ });
6
+ }
7
+ export async function sha256Hex(raw) {
8
+ const digest = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(raw));
9
+ return [...new Uint8Array(digest)].map((b) => b.toString(16).padStart(2, '0')).join('');
10
+ }
11
+ export function base64url(bytes) {
12
+ let text = '';
13
+ for (const byte of bytes)
14
+ text += String.fromCharCode(byte);
15
+ return btoa(text).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
16
+ }
17
+ export function randomSecret(prefix = '') {
18
+ return prefix + base64url(crypto.getRandomValues(new Uint8Array(32)));
19
+ }
20
+ export const str = (value) => (typeof value === 'string' ? value.trim() : '');
21
+ export const nowIso = () => new Date().toISOString();
22
+ export function parseJsonList(raw) {
23
+ if (!raw)
24
+ return [];
25
+ try {
26
+ const parsed = JSON.parse(raw);
27
+ if (Array.isArray(parsed))
28
+ return parsed.filter((s) => typeof s === 'string');
29
+ }
30
+ catch { }
31
+ return raw.split(/\s+/).filter(Boolean);
32
+ }
33
+ export async function readBody(request) {
34
+ const type = request.headers.get('content-type') || '';
35
+ const text = await request.text();
36
+ if (!text)
37
+ return {};
38
+ if (type.includes('application/x-www-form-urlencoded'))
39
+ return Object.fromEntries(new URLSearchParams(text));
40
+ try {
41
+ const parsed = JSON.parse(text);
42
+ return parsed && typeof parsed === 'object' ? parsed : {};
43
+ }
44
+ catch {
45
+ return Object.fromEntries(new URLSearchParams(text));
46
+ }
47
+ }
48
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,96 @@
1
+ {
2
+ "name": "@ninomae/mcp-app-server",
3
+ "version": "0.1.0",
4
+ "description": "Turn your existing app into an OAuth 2.1-protected MCP server. Bring your own identity, tools and storage; users connect Claude, ChatGPT, Cursor or any MCP client to their own data.",
5
+ "keywords": [
6
+ "mcp",
7
+ "model-context-protocol",
8
+ "mcp-server",
9
+ "oauth",
10
+ "oauth2",
11
+ "oauth2.1",
12
+ "pkce",
13
+ "ai-agent",
14
+ "claude",
15
+ "chatgpt",
16
+ "cursor",
17
+ "cloudflare-workers",
18
+ "storage-agnostic"
19
+ ],
20
+ "license": "MIT",
21
+ "author": "erzhiqianyi",
22
+ "homepage": "https://github.com/erzhiqianyi/mcp-app-server#readme",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "git+https://github.com/erzhiqianyi/mcp-app-server.git"
26
+ },
27
+ "bugs": {
28
+ "url": "https://github.com/erzhiqianyi/mcp-app-server/issues"
29
+ },
30
+ "type": "module",
31
+ "sideEffects": false,
32
+ "engines": {
33
+ "node": ">=22"
34
+ },
35
+ "main": "./dist/index.js",
36
+ "types": "./dist/index.d.ts",
37
+ "exports": {
38
+ ".": {
39
+ "types": "./dist/index.d.ts",
40
+ "default": "./dist/index.js"
41
+ },
42
+ "./sql": {
43
+ "types": "./dist/sql.d.ts",
44
+ "default": "./dist/sql.js"
45
+ },
46
+ "./react": {
47
+ "types": "./dist/react.d.ts",
48
+ "default": "./dist/react.js"
49
+ },
50
+ "./package.json": "./package.json"
51
+ },
52
+ "files": [
53
+ "dist",
54
+ "README.md",
55
+ "README.zh-CN.md",
56
+ "LICENSE",
57
+ "CHANGELOG.md"
58
+ ],
59
+ "publishConfig": {
60
+ "access": "public"
61
+ },
62
+ "scripts": {
63
+ "build": "rm -rf dist && tsc -p tsconfig.build.json",
64
+ "typecheck": "tsc -p tsconfig.json --noEmit",
65
+ "test": "node --test tests/*.test.mjs",
66
+ "prepack": "npm run build",
67
+ "prepublishOnly": "npm run typecheck && npm test",
68
+ "release": "npm version",
69
+ "smoke:pack": "npm pack --dry-run",
70
+ "pretest": "npm run build"
71
+ },
72
+ "peerDependencies": {
73
+ "@modelcontextprotocol/sdk": "^1.30.0",
74
+ "jose": "^6.0.0",
75
+ "react": ">=18",
76
+ "zod": "^4.0.0"
77
+ },
78
+ "peerDependenciesMeta": {
79
+ "jose": {
80
+ "optional": true
81
+ },
82
+ "react": {
83
+ "optional": true
84
+ }
85
+ },
86
+ "devDependencies": {
87
+ "@modelcontextprotocol/sdk": "^1.30.0",
88
+ "@types/react": "^19.2.14",
89
+ "esbuild": "^0.28.2",
90
+ "jose": "^6.2.12",
91
+ "miniflare": "^4.20260515.0",
92
+ "react": "^19.3.0",
93
+ "typescript": "^5.9.3",
94
+ "zod": "^4.6.2"
95
+ }
96
+ }