@fentaris/cli 0.2.0 → 0.2.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.
@@ -1 +1 @@
1
- {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../src/domain/template/template.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3D,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAmFjJ;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAkF7D;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnG;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUxH"}
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../src/domain/template/template.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3D,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAiFjJ;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAgE7D;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnG;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUxH"}
@@ -55,8 +55,6 @@ export function renderTemplate(input) {
55
55
  `FENTARIS_AUTH_KEY=${input.authKey}`,
56
56
  `FENTARIS_GUEST_API_KEY=${input.guestApiKey}`,
57
57
  `FENTARIS_ADMIN_API_KEY=${input.adminApiKey}`,
58
- `FENTARIS_PORT=${input.port}`,
59
- `FENTARIS_PATH=${input.proxyPath}`,
60
58
  "",
61
59
  ].join("\n"),
62
60
  ".gitignore": [
@@ -77,22 +75,16 @@ export function renderTemplate(input) {
77
75
  }
78
76
  export function renderEntrypoint(input) {
79
77
  return `import {
80
- MemoryRateLimitStore,
81
- SlidingWindowRateLimiter,
82
78
  credentialJson,
83
79
  fentaris,
84
80
  group,
85
- mcp,
86
81
  policy,
87
- rateLimitMiddleware,
82
+ profiler,
88
83
  stdio,
89
84
  streamableHttp,
90
85
  user,
91
86
  } from "@fentaris/core";
92
87
 
93
- const port = Number(process.env.FENTARIS_PORT ?? ${input.port});
94
- const proxyPath = process.env.FENTARIS_PATH ?? "${input.proxyPath}";
95
-
96
88
  const guest = user("guest", {
97
89
  displayName: "Guest Demo User",
98
90
  apiKeys: [credentialJson("users.guest.apiKeys.0")],
@@ -112,50 +104,38 @@ const limitedPolicy = policy("limited-demo")
112
104
 
113
105
  const adminPolicy = policy("admin-full-access").mcp("*").allow("*");
114
106
 
115
- const limiter = new SlidingWindowRateLimiter({
116
- store: new MemoryRateLimitStore(),
117
- maxPerWindow: 30,
118
- windowMs: 60_000,
119
- });
107
+ const runtimeProfiler = profiler()
108
+ .pretty()
109
+ .on("mcp.call.success", (event) => {
110
+ console.log(\`profile -> \${event.server ?? "unknown"}:\${event.operation} completed in \${event.durationMs ?? 0}ms\`);
111
+ });
120
112
 
121
113
  const app = fentaris({
122
- port,
123
- path: proxyPath,
124
114
  groups: [
125
115
  group({ id: "limited", users: [guest], policy: limitedPolicy }),
126
116
  group({ id: "admins", users: [admin], policy: adminPolicy }),
127
117
  ],
128
- servers: [
129
- mcp("demo-files", {
130
- transport: stdio({
131
- command: "npx",
132
- args: ["-y", "@modelcontextprotocol/server-filesystem", "./demo-files"],
133
- }),
134
- }),
135
- mcp("specification", {
136
- transport: streamableHttp({
137
- url: "${remoteMcpUrl}",
138
- }),
139
- }),
140
- ],
118
+ profiler: runtimeProfiler,
141
119
  });
142
120
 
143
- // Global middleware runs before requests are forwarded to upstream MCP servers.
144
- app.use(rateLimitMiddleware({ limiter }));
145
-
146
- app.mcp("demo-files").use((ctx, next) => {
147
- console.log(\`demo-files -> \${ctx.operation}\`);
148
- return next();
121
+ app.mcp("demo-files", {
122
+ transport: stdio({
123
+ command: "npx",
124
+ args: ["-y", "@modelcontextprotocol/server-filesystem", "./demo-files"],
125
+ }),
149
126
  });
150
127
 
151
- app.mcp("specification").on("tool:success", ({ ctx }) => {
152
- console.log(\`specification -> \${ctx.tool?.name ?? ctx.operation}\`);
128
+ app.mcp("specification", {
129
+ transport: streamableHttp({
130
+ url: "${remoteMcpUrl}",
131
+ }),
153
132
  });
154
133
 
155
- await app.start(() => {
156
- console.log(\`Fentaris proxy listening at http://localhost:\${port}\${proxyPath}\`);
157
- console.log("Use x-fentaris-api-key with the generated guest or admin key.");
134
+ app.mcp("specification").on("tool:success", ({ ctx, durationMs }) => {
135
+ console.log(\`specification -> \${ctx.tool?.name ?? ctx.operation} (\${durationMs}ms)\`);
158
136
  });
137
+
138
+ await app.start();
159
139
  `;
160
140
  }
161
141
  export async function writeTemplate(targetDir, files) {
@@ -185,7 +165,7 @@ This project was generated by the Fentaris CLI. It starts a local MCP proxy with
185
165
  - A limited \`guest\` user and an unrestricted \`admin\` user
186
166
  - A local filesystem demo server mounted as \`demo-files\`
187
167
  - A remote HTTP MCP server mounted as \`specification\`
188
- - A sliding-window rate limiter installed as global middleware
168
+ - A runtime profiler with a simple MCP success event example
189
169
 
190
170
  ## Quick start
191
171
 
@@ -199,8 +179,8 @@ The proxy listens on \`http://localhost:${input.port}${input.proxyPath}\` by def
199
179
 
200
180
  ## Project files
201
181
 
202
- - \`src/index.ts\` configures the proxy, users, policies, middleware, and upstream MCP servers.
203
- - \`fentaris.json\` is used by \`fentaris check\`, \`fentaris dev\`, and \`fentaris build\`.
182
+ - \`src/index.ts\` configures the app groups, profiler, and upstream MCP servers.
183
+ - \`fentaris.json\` configures the project entrypoint, port, path, and CLI runtime defaults.
204
184
  - \`.fentaris/credentials.enc.json\` stores encrypted local credentials and is intentionally ignored by git.
205
185
  - \`demo-files\` is the sandboxed directory exposed by the demo filesystem server.
206
186
 
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/domain/template/template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/domain/template/template.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fentaris/cli",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Fentaris MCP Proxy - CLI",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -11,7 +11,7 @@
11
11
  "dist"
12
12
  ],
13
13
  "dependencies": {
14
- "@fentaris/core": "0.4.0"
14
+ "@fentaris/core": "0.5.0"
15
15
  },
16
16
  "devDependencies": {
17
17
  "@types/node": "^25.9.1",