mirror of
https://github.com/angular/angular.git
synced 2026-09-14 13:54:52 +08:00
1963a0eb18
This enables the use of the `experimentalWebMcpTool` option on signal forms and implicitly declares a WebMCP tool based on the form data model. This is an experiment inspirted by the WebMCP declarative forms API to see if Angular's framework-level knowledge of the form's declarative data model can produce higher quality WebMCP tools than the web standard can on its own with less effort from the developer.
Example:
```typescript
// main.ts
import {bootstrapApplication} from '@angular/platform-browser';
import {provideExperimentalWebMcpForms} from '@angular/forms';
import {MyComp} from './form';
bootstrapApplication(MyComp, {
providers: [
// Activate the feature.
provideExperimentalWebMcpForms(),
],
});
```
```typescript
// form.ts
import {Component, signal} from '@angular/core';
import {form} from '@angular/forms';
@Component({ /* ... */ })
export class MyComp {
private readonly f = form(signal({
firstName: '',
lastName: '',
}), {
// Implicitly creates a WebMCP tool named `createUser` which accepts a `firstName` and `lastName` as parameters.
experimentalWebMcpTool: {
name: 'createUser',
description: 'Creates a user with the given name.',
},
// Invokes the submit action when the agent calls the WebMCP tool.
submission: {
action: () => {
console.log('User clicked submit, or agent called the tool!');
},
},
});
// ...
}
```
40 lines
886 B
Python
40 lines
886 B
Python
load("//tools:defaults.bzl", "generate_api_docs", "ng_project")
|
|
|
|
package(default_visibility = ["//visibility:public"])
|
|
|
|
ng_project(
|
|
name = "signals",
|
|
srcs = glob(
|
|
[
|
|
"*.ts",
|
|
"src/**/*.ts",
|
|
],
|
|
),
|
|
deps = [
|
|
"//packages/common/http",
|
|
"//packages/core",
|
|
"//packages/forms",
|
|
"//packages/forms:node_modules/@mcp-b/webmcp-types",
|
|
"//packages/forms:node_modules/@standard-schema/spec",
|
|
],
|
|
)
|
|
|
|
filegroup(
|
|
name = "files_for_docgen",
|
|
srcs = glob([
|
|
"*.ts",
|
|
"src/**/*.ts",
|
|
]) + ["PACKAGE.md"],
|
|
)
|
|
|
|
generate_api_docs(
|
|
name = "forms_signals_docs",
|
|
srcs = [
|
|
":files_for_docgen",
|
|
"//packages:common_files_and_deps_for_docs",
|
|
"//packages/common:files_for_docgen",
|
|
],
|
|
entry_point = ":index.ts",
|
|
module_name = "@angular/forms/signals",
|
|
)
|