frontmcp 1.3.0 → 1.4.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.
package/README.md CHANGED
@@ -7,10 +7,10 @@
7
7
  </picture>
8
8
  <hr>
9
9
 
10
- **The TypeScript way to build MCP servers with decorators, DI, and Streamable HTTP.**
10
+ **The production-grade, TypeScript-first framework for building MCP servers decorators, DI, auth, and Streamable HTTP, batteries included.**
11
11
 
12
12
  [![NPM - @frontmcp/sdk](https://img.shields.io/npm/v/@frontmcp/sdk.svg?v=2)](https://www.npmjs.com/package/@frontmcp/sdk)
13
- [![Node](https://img.shields.io/badge/node-%3E%3D22-339933?logo=node.js&logoColor=white)](https://nodejs.org)
13
+ [![Node](https://img.shields.io/badge/node-%3E%3D24-339933?logo=node.js&logoColor=white)](https://nodejs.org)
14
14
  [![License](https://img.shields.io/github/license/agentfront/frontmcp.svg?v=1)](https://github.com/agentfront/frontmcp/blob/main/LICENSE)
15
15
  [![Snyk](https://snyk.io/test/github/agentfront/frontmcp/badge.svg)](https://snyk.io/test/github/agentfront/frontmcp)
16
16
 
@@ -20,12 +20,17 @@
20
20
 
21
21
  ---
22
22
 
23
- FrontMCP is a **TypeScript-first framework** for the [Model Context Protocol (MCP)](https://modelcontextprotocol.io).
24
- You write clean, typed code; FrontMCP handles the protocol, transport, DI, session/auth, and execution flow.
23
+ FrontMCP turns the [Model Context Protocol](https://modelcontextprotocol.io) into a
24
+ typed, declarative framework. You write clean `@Tool`, `@Resource`, and `@App`
25
+ classes; FrontMCP handles the protocol, transport, dependency injection, sessions,
26
+ auth, and execution flow — and the **same server runs locally and ships to
27
+ production unchanged**.
25
28
 
26
29
  ```ts
27
30
  import 'reflect-metadata';
31
+
28
32
  import { FrontMcp, LogLevel } from '@frontmcp/sdk';
33
+
29
34
  import HelloApp from './hello.app';
30
35
 
31
36
  @FrontMcp({
@@ -37,6 +42,14 @@ import HelloApp from './hello.app';
37
42
  export default class Server {}
38
43
  ```
39
44
 
45
+ ## Why FrontMCP
46
+
47
+ - **Typed by default** — decorators + Zod schemas give end-to-end types from input to output, with editor autocomplete and compile-time checks.
48
+ - **Batteries included** — auth (OAuth/JWKS/DCR), sessions, transport, discovery, and DI are built in, not bolted on.
49
+ - **Ship anywhere** — one codebase deploys to Node, Vercel, AWS Lambda, Cloudflare Workers, or a serverless bundle.
50
+ - **Production-minded** — stateful/stateless sessions, high-availability transport, structured observability, and a 95%+ tested core.
51
+ - **Extensible** — plugins, lifecycle hooks, OpenAPI adapters, and external MCP sub-apps when you outgrow the defaults.
52
+
40
53
  ## Installation
41
54
 
42
55
  **Node.js 24+** required.
@@ -50,34 +63,30 @@ npm i -D frontmcp @types/node@^24
50
63
  npx frontmcp init
51
64
  ```
52
65
 
53
- > Full setup guide: [Installation][docs-install]
66
+ > Full setup guide: [Installation][docs-install] &middot; [Quickstart][docs-quickstart]
54
67
 
55
68
  ## Capabilities
56
69
 
57
- | Capability | Description | Docs |
58
- | -------------------- | ------------------------------------------------------------------------------- | ------------------------------- |
59
- | **@FrontMcp Server** | Decorator-configured server with info, apps, HTTP, logging, session, auth | [Server][docs-server] |
60
- | **@App** | Organizational units grouping tools, resources, prompts with optional isolation | [Apps][docs-apps] |
61
- | **@Tool** | Typed actions with Zod schemas — class or function style | [Tools][docs-tools] |
62
- | **@Resource** | Read-only data exposure with static and template URIs | [Resources][docs-resources] |
63
- | **@Prompt** | Reusable message templates returning `GetPromptResult` | [Prompts][docs-prompts] |
64
- | **@Agent** | Orchestrated multi-step tool chains | [Agents][docs-agents] |
65
- | **Elicitation** | Request structured user input mid-flow | [Elicitation][docs-elicitation] |
66
- | **Skills** | HTTP-discoverable tool manifests for agent marketplaces | [Skills][docs-skills] |
67
- | **Discovery** | Automatic capability advertisement for MCP clients | [Discovery][docs-discovery] |
68
- | **Authentication** | Remote OAuth, Local OAuth, JWKS, DCR, per-app auth | [Authentication][docs-auth] |
69
- | **Sessions** | Stateful/stateless session modes with JWT or UUID transport IDs | [Server][docs-server] |
70
- | **Direct Client** | In-process `create()`, `connect()`, `connectOpenAI()`, `connectClaude()` | [Direct Client][docs-direct] |
71
- | **Transport** | Streamable HTTP + SSE with session headers | [Transport][docs-transport] |
72
- | **Ext-Apps** | Mount external MCP servers as sub-apps | [Ext-Apps][docs-ext-apps] |
73
- | **Hooks** | 5 hook families: tool, list-tools, HTTP, resource, prompt | [Hooks][docs-hooks] |
74
- | **Providers / DI** | Scoped dependency injection with GLOBAL and CONTEXT scopes | [Providers][docs-providers] |
75
- | **Plugins** | Cache, Remember, CodeCall, Dashboard — or build your own | [Plugins][docs-plugins] |
76
- | **Adapters** | Generate tools from OpenAPI specs | [Adapters][docs-adapters] |
77
- | **Testing** | E2E fixtures, matchers, HTTP mocking for MCP servers | [Testing][docs-testing] |
78
- | **UI Library** | HTML/React widgets, SSR, MCP Bridge, web components | [UI][docs-ui] |
79
- | **CLI** | `create`, `init`, `dev`, `build`, `inspector`, `doctor` | [CLI][docs-install] |
80
- | **Deployment** | Local dev, production builds, version alignment | [Deployment][docs-deploy] |
70
+ **Build** decorator-configured [`@FrontMcp` server][docs-server] and [`@App`][docs-apps]
71
+ domains; typed [`@Tool`][docs-tools], [`@Resource`][docs-resources], and
72
+ [`@Prompt`][docs-prompts] primitives; [`@Agent`][docs-agents] multi-step chains; and
73
+ scoped [Providers / DI][docs-providers].
74
+
75
+ **Secure** [Remote & Local OAuth, JWKS, DCR, per-app auth][docs-auth] with
76
+ stateful / stateless [sessions][docs-server] (JWT or UUID transport IDs).
77
+
78
+ **Connect & operate** [Streamable HTTP + SSE transport][docs-transport],
79
+ capability [discovery][docs-discovery], [elicitation][docs-elicitation],
80
+ [hooks][docs-hooks], HTTP-discoverable [skills][docs-skills],
81
+ [external MCP sub-apps][docs-ext-apps], an in-process [Direct Client][docs-direct]
82
+ (`connectOpenAI` / `connectClaude`), and first-class [deployment][docs-deploy].
83
+
84
+ **Extend & tooling** official [plugins][docs-plugins] (Cache, Remember, CodeCall,
85
+ Dashboard), the [OpenAPI adapter][docs-adapters], a [UI library][docs-ui] (HTML/React
86
+ widgets, SSR, MCP Bridge), an [E2E testing framework][docs-testing], and a
87
+ [CLI][docs-install] (`create`, `init`, `dev`, `build`, `inspect`, `doctor`).
88
+
89
+ Full reference: **[docs.agentfront.dev/frontmcp][docs-home]**
81
90
 
82
91
  ## Packages
83
92
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "frontmcp",
3
- "version": "1.3.0",
3
+ "version": "1.4.1",
4
4
  "description": "FrontMCP command line interface",
5
5
  "author": "AgentFront <info@agentfront.dev>",
6
6
  "homepage": "https://docs.agentfront.dev",
@@ -23,31 +23,29 @@
23
23
  },
24
24
  "main": "./src/index.js",
25
25
  "types": "./src/index.d.ts",
26
- "bin": {
27
- "frontmcp": "./src/core/cli.js"
28
- },
26
+ "bin": "./src/core/cli.js",
29
27
  "engines": {
30
28
  "node": ">=24.0.0"
31
29
  },
32
30
  "dependencies": {
33
31
  "@clack/prompts": "^0.10.0",
34
- "@frontmcp/lazy-zod": "1.3.0",
35
- "@frontmcp/utils": "1.3.0",
36
- "@frontmcp/skills": "1.3.0",
32
+ "@frontmcp/lazy-zod": "1.4.1",
33
+ "@frontmcp/skills": "1.4.1",
34
+ "@frontmcp/utils": "1.4.1",
35
+ "@rspack/core": "^1.7.6",
37
36
  "commander": "^13.0.0",
37
+ "esbuild": "^0.27.3",
38
38
  "tslib": "^2.3.0",
39
39
  "vectoriadb": "^2.2.0",
40
- "@rspack/core": "^1.7.6",
41
- "esbuild": "^0.27.3",
42
40
  "yauzl": "^3.2.0",
43
41
  "yazl": "^3.3.1"
44
42
  },
45
43
  "devDependencies": {
46
- "typescript": "^5.5.3",
47
- "tsx": "^4.20.6",
48
44
  "@types/node": "^24.0.0",
49
45
  "@types/yauzl": "^2.10.3",
50
- "@types/yazl": "^2.4.5"
46
+ "@types/yazl": "^2.4.5",
47
+ "tsx": "^4.20.6",
48
+ "typescript": "^5.5.3"
51
49
  },
52
50
  "type": "commonjs"
53
51
  }
@@ -586,6 +586,7 @@ var _getCmd = promptCmd
586
586
  .description('Render a prompt by name')
587
587
  ${promptGetOptionLines}
588
588
  .allowUnknownOption(true)
589
+ .allowExcessArguments(true) // #382 — without this, an out-of-spec flag like \`--bogus x\` becomes excess operands and Commander throws "too many arguments" before the action can emit the precise "unknown option(s) for prompt" error.
589
590
  .action(async function(name) {
590
591
  try {
591
592
  var spec = promptArgs[name];