wmcp-annotate 1.0.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.
- package/AGENTS.md +108 -0
- package/IMPLEMENTATION_PLAN.md +187 -0
- package/LAUNCH.md +217 -0
- package/PRD.md +199 -0
- package/PROMPT.md +62 -0
- package/README.md +140 -0
- package/dist/commands/generate.d.ts +3 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +46 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/scan.d.ts +3 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +24 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/suggest.d.ts +3 -0
- package/dist/commands/suggest.d.ts.map +1 -0
- package/dist/commands/suggest.js +36 -0
- package/dist/commands/suggest.js.map +1 -0
- package/dist/commands/validate.d.ts +3 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +39 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/analyzer.d.ts +10 -0
- package/dist/lib/analyzer.d.ts.map +1 -0
- package/dist/lib/analyzer.js +80 -0
- package/dist/lib/analyzer.js.map +1 -0
- package/dist/lib/generator.d.ts +12 -0
- package/dist/lib/generator.d.ts.map +1 -0
- package/dist/lib/generator.js +136 -0
- package/dist/lib/generator.js.map +1 -0
- package/dist/lib/output.d.ts +6 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +35 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/scanner.d.ts +19 -0
- package/dist/lib/scanner.d.ts.map +1 -0
- package/dist/lib/scanner.js +159 -0
- package/dist/lib/scanner.js.map +1 -0
- package/dist/lib/validator.d.ts +13 -0
- package/dist/lib/validator.d.ts.map +1 -0
- package/dist/lib/validator.js +178 -0
- package/dist/lib/validator.js.map +1 -0
- package/dist/types.d.ts +109 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/docs/index.html +563 -0
- package/marketing/email-outreach.md +183 -0
- package/marketing/landing-page.md +165 -0
- package/marketing/social-posts.md +192 -0
- package/package.json +58 -0
- package/scripts/publish.sh +33 -0
- package/specs/generate-command.md +147 -0
- package/specs/scan-command.md +92 -0
- package/specs/suggest-command.md +120 -0
- package/specs/validate-command.md +108 -0
- package/src/commands/generate.ts +48 -0
- package/src/commands/scan.ts +28 -0
- package/src/commands/suggest.ts +39 -0
- package/src/commands/validate.ts +44 -0
- package/src/index.ts +51 -0
- package/src/lib/analyzer.ts +90 -0
- package/src/lib/generator.ts +149 -0
- package/src/lib/output.ts +40 -0
- package/src/lib/scanner.ts +185 -0
- package/src/lib/validator.ts +192 -0
- package/src/types.ts +124 -0
- package/tsconfig.json +20 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
export interface ScannedElement {
|
|
2
|
+
type: 'form' | 'button' | 'link' | 'api';
|
|
3
|
+
id?: string;
|
|
4
|
+
selector: string;
|
|
5
|
+
label: string;
|
|
6
|
+
inputs?: InputField[];
|
|
7
|
+
submitButton?: {
|
|
8
|
+
selector: string;
|
|
9
|
+
label: string;
|
|
10
|
+
};
|
|
11
|
+
context?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface InputField {
|
|
14
|
+
name: string;
|
|
15
|
+
type: string;
|
|
16
|
+
label?: string;
|
|
17
|
+
required: boolean;
|
|
18
|
+
placeholder?: string;
|
|
19
|
+
options?: string[];
|
|
20
|
+
}
|
|
21
|
+
export interface ApiCall {
|
|
22
|
+
method: string;
|
|
23
|
+
url: string;
|
|
24
|
+
params?: string[];
|
|
25
|
+
body?: Record<string, unknown>;
|
|
26
|
+
}
|
|
27
|
+
export interface ScanResult {
|
|
28
|
+
url: string;
|
|
29
|
+
scannedAt: string;
|
|
30
|
+
elements: ScannedElement[];
|
|
31
|
+
apiCalls: ApiCall[];
|
|
32
|
+
}
|
|
33
|
+
export interface ToolSuggestion {
|
|
34
|
+
name: string;
|
|
35
|
+
description: string;
|
|
36
|
+
readOnly: boolean;
|
|
37
|
+
inputSchema: JsonSchema;
|
|
38
|
+
sourceElement: {
|
|
39
|
+
type: string;
|
|
40
|
+
selector: string;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export interface JsonSchema {
|
|
44
|
+
type: string;
|
|
45
|
+
properties?: Record<string, JsonSchemaProperty>;
|
|
46
|
+
required?: string[];
|
|
47
|
+
}
|
|
48
|
+
export interface JsonSchemaProperty {
|
|
49
|
+
type: string;
|
|
50
|
+
description?: string;
|
|
51
|
+
enum?: string[];
|
|
52
|
+
default?: unknown;
|
|
53
|
+
minimum?: number;
|
|
54
|
+
maximum?: number;
|
|
55
|
+
pattern?: string;
|
|
56
|
+
}
|
|
57
|
+
export interface SuggestResult {
|
|
58
|
+
version: string;
|
|
59
|
+
url: string;
|
|
60
|
+
suggestedAt: string;
|
|
61
|
+
tools: ToolSuggestion[];
|
|
62
|
+
}
|
|
63
|
+
export interface ValidationIssue {
|
|
64
|
+
level: 'error' | 'warning';
|
|
65
|
+
code: string;
|
|
66
|
+
message: string;
|
|
67
|
+
suggestion?: string;
|
|
68
|
+
}
|
|
69
|
+
export interface ToolValidation {
|
|
70
|
+
name: string;
|
|
71
|
+
status: 'valid' | 'warning' | 'error';
|
|
72
|
+
checks: Record<string, 'pass' | 'fail' | 'warning'>;
|
|
73
|
+
issues?: ValidationIssue[];
|
|
74
|
+
}
|
|
75
|
+
export interface ValidationResult {
|
|
76
|
+
url: string;
|
|
77
|
+
validatedAt: string;
|
|
78
|
+
summary: {
|
|
79
|
+
total: number;
|
|
80
|
+
valid: number;
|
|
81
|
+
warnings: number;
|
|
82
|
+
errors: number;
|
|
83
|
+
};
|
|
84
|
+
tools: ToolValidation[];
|
|
85
|
+
}
|
|
86
|
+
export interface ScanOptions {
|
|
87
|
+
depth: string;
|
|
88
|
+
output?: string;
|
|
89
|
+
format: string;
|
|
90
|
+
verbose?: boolean;
|
|
91
|
+
}
|
|
92
|
+
export interface SuggestOptions {
|
|
93
|
+
scanFile?: string;
|
|
94
|
+
output?: string;
|
|
95
|
+
format: string;
|
|
96
|
+
}
|
|
97
|
+
export interface GenerateOptions {
|
|
98
|
+
suggestFile?: string;
|
|
99
|
+
output?: string;
|
|
100
|
+
format: string;
|
|
101
|
+
module: string;
|
|
102
|
+
}
|
|
103
|
+
export interface ValidateOptions {
|
|
104
|
+
output?: string;
|
|
105
|
+
format: string;
|
|
106
|
+
strict?: boolean;
|
|
107
|
+
ci?: boolean;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,+BAA+B"}
|
package/docs/index.html
ADDED
|
@@ -0,0 +1,563 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>wmcp-annotate - Make Any Website AI-Agent Ready in 5 Minutes</title>
|
|
7
|
+
<meta name="description" content="Automatically generate WebMCP tool annotations for your site. Let AI agents interact with your web app through the new W3C standard.">
|
|
8
|
+
<meta property="og:title" content="wmcp-annotate - Make Any Website AI-Agent Ready">
|
|
9
|
+
<meta property="og:description" content="Generate WebMCP annotations in one command. The fastest path to AI-agent compatibility.">
|
|
10
|
+
<meta property="og:type" content="website">
|
|
11
|
+
<meta property="og:url" content="https://wmcp-annotate.dev">
|
|
12
|
+
<meta name="twitter:card" content="summary_large_image">
|
|
13
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
14
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
15
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
|
16
|
+
<style>
|
|
17
|
+
:root {
|
|
18
|
+
--primary: #6366f1;
|
|
19
|
+
--primary-dark: #4f46e5;
|
|
20
|
+
--bg: #0f0f13;
|
|
21
|
+
--bg-light: #18181f;
|
|
22
|
+
--text: #e4e4e7;
|
|
23
|
+
--text-muted: #a1a1aa;
|
|
24
|
+
--border: #27272a;
|
|
25
|
+
--success: #22c55e;
|
|
26
|
+
--gradient: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%);
|
|
27
|
+
}
|
|
28
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
29
|
+
body {
|
|
30
|
+
font-family: 'Inter', -apple-system, sans-serif;
|
|
31
|
+
background: var(--bg);
|
|
32
|
+
color: var(--text);
|
|
33
|
+
line-height: 1.6;
|
|
34
|
+
}
|
|
35
|
+
.container { max-width: 1200px; margin: 0 auto; padding: 0 24px; }
|
|
36
|
+
|
|
37
|
+
/* Nav */
|
|
38
|
+
nav {
|
|
39
|
+
padding: 20px 0;
|
|
40
|
+
border-bottom: 1px solid var(--border);
|
|
41
|
+
position: sticky;
|
|
42
|
+
top: 0;
|
|
43
|
+
background: rgba(15, 15, 19, 0.9);
|
|
44
|
+
backdrop-filter: blur(10px);
|
|
45
|
+
z-index: 100;
|
|
46
|
+
}
|
|
47
|
+
nav .container {
|
|
48
|
+
display: flex;
|
|
49
|
+
justify-content: space-between;
|
|
50
|
+
align-items: center;
|
|
51
|
+
}
|
|
52
|
+
.logo {
|
|
53
|
+
font-weight: 700;
|
|
54
|
+
font-size: 1.25rem;
|
|
55
|
+
color: var(--text);
|
|
56
|
+
text-decoration: none;
|
|
57
|
+
}
|
|
58
|
+
.logo span { color: var(--primary); }
|
|
59
|
+
.nav-links { display: flex; gap: 32px; align-items: center; }
|
|
60
|
+
.nav-links a {
|
|
61
|
+
color: var(--text-muted);
|
|
62
|
+
text-decoration: none;
|
|
63
|
+
font-size: 0.9rem;
|
|
64
|
+
transition: color 0.2s;
|
|
65
|
+
}
|
|
66
|
+
.nav-links a:hover { color: var(--text); }
|
|
67
|
+
|
|
68
|
+
/* Hero */
|
|
69
|
+
.hero {
|
|
70
|
+
padding: 100px 0 80px;
|
|
71
|
+
text-align: center;
|
|
72
|
+
}
|
|
73
|
+
.hero-badge {
|
|
74
|
+
display: inline-flex;
|
|
75
|
+
align-items: center;
|
|
76
|
+
gap: 8px;
|
|
77
|
+
background: var(--bg-light);
|
|
78
|
+
border: 1px solid var(--border);
|
|
79
|
+
padding: 8px 16px;
|
|
80
|
+
border-radius: 100px;
|
|
81
|
+
font-size: 0.85rem;
|
|
82
|
+
margin-bottom: 24px;
|
|
83
|
+
}
|
|
84
|
+
.hero-badge span { color: var(--success); }
|
|
85
|
+
h1 {
|
|
86
|
+
font-size: clamp(2.5rem, 6vw, 4rem);
|
|
87
|
+
font-weight: 700;
|
|
88
|
+
line-height: 1.1;
|
|
89
|
+
margin-bottom: 24px;
|
|
90
|
+
}
|
|
91
|
+
h1 .highlight {
|
|
92
|
+
background: var(--gradient);
|
|
93
|
+
-webkit-background-clip: text;
|
|
94
|
+
-webkit-text-fill-color: transparent;
|
|
95
|
+
background-clip: text;
|
|
96
|
+
}
|
|
97
|
+
.hero-sub {
|
|
98
|
+
font-size: 1.25rem;
|
|
99
|
+
color: var(--text-muted);
|
|
100
|
+
max-width: 600px;
|
|
101
|
+
margin: 0 auto 40px;
|
|
102
|
+
}
|
|
103
|
+
.hero-code {
|
|
104
|
+
background: var(--bg-light);
|
|
105
|
+
border: 1px solid var(--border);
|
|
106
|
+
border-radius: 12px;
|
|
107
|
+
padding: 24px 32px;
|
|
108
|
+
display: inline-block;
|
|
109
|
+
font-family: 'JetBrains Mono', monospace;
|
|
110
|
+
font-size: 1.1rem;
|
|
111
|
+
margin-bottom: 40px;
|
|
112
|
+
}
|
|
113
|
+
.hero-code .prompt { color: var(--text-muted); }
|
|
114
|
+
.hero-code .cmd { color: var(--primary); }
|
|
115
|
+
.cta-buttons { display: flex; gap: 16px; justify-content: center; flex-wrap: wrap; }
|
|
116
|
+
.btn {
|
|
117
|
+
padding: 14px 28px;
|
|
118
|
+
border-radius: 8px;
|
|
119
|
+
font-weight: 600;
|
|
120
|
+
font-size: 1rem;
|
|
121
|
+
text-decoration: none;
|
|
122
|
+
transition: all 0.2s;
|
|
123
|
+
cursor: pointer;
|
|
124
|
+
border: none;
|
|
125
|
+
}
|
|
126
|
+
.btn-primary {
|
|
127
|
+
background: var(--gradient);
|
|
128
|
+
color: white;
|
|
129
|
+
}
|
|
130
|
+
.btn-primary:hover { transform: translateY(-2px); box-shadow: 0 10px 30px rgba(99, 102, 241, 0.3); }
|
|
131
|
+
.btn-secondary {
|
|
132
|
+
background: transparent;
|
|
133
|
+
border: 1px solid var(--border);
|
|
134
|
+
color: var(--text);
|
|
135
|
+
}
|
|
136
|
+
.btn-secondary:hover { border-color: var(--text-muted); }
|
|
137
|
+
|
|
138
|
+
/* Problem */
|
|
139
|
+
.problem {
|
|
140
|
+
padding: 80px 0;
|
|
141
|
+
background: var(--bg-light);
|
|
142
|
+
}
|
|
143
|
+
.problem h2 {
|
|
144
|
+
font-size: 2.5rem;
|
|
145
|
+
text-align: center;
|
|
146
|
+
margin-bottom: 16px;
|
|
147
|
+
}
|
|
148
|
+
.problem-sub {
|
|
149
|
+
text-align: center;
|
|
150
|
+
color: var(--text-muted);
|
|
151
|
+
max-width: 700px;
|
|
152
|
+
margin: 0 auto 48px;
|
|
153
|
+
font-size: 1.1rem;
|
|
154
|
+
}
|
|
155
|
+
.problem-grid {
|
|
156
|
+
display: grid;
|
|
157
|
+
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
|
158
|
+
gap: 24px;
|
|
159
|
+
}
|
|
160
|
+
.problem-card {
|
|
161
|
+
background: var(--bg);
|
|
162
|
+
border: 1px solid var(--border);
|
|
163
|
+
border-radius: 12px;
|
|
164
|
+
padding: 24px;
|
|
165
|
+
}
|
|
166
|
+
.problem-card .icon { font-size: 2rem; margin-bottom: 16px; }
|
|
167
|
+
.problem-card h3 { font-size: 1.1rem; margin-bottom: 8px; }
|
|
168
|
+
.problem-card p { color: var(--text-muted); font-size: 0.95rem; }
|
|
169
|
+
|
|
170
|
+
/* Features */
|
|
171
|
+
.features { padding: 100px 0; }
|
|
172
|
+
.features h2 {
|
|
173
|
+
font-size: 2.5rem;
|
|
174
|
+
text-align: center;
|
|
175
|
+
margin-bottom: 16px;
|
|
176
|
+
}
|
|
177
|
+
.features-sub {
|
|
178
|
+
text-align: center;
|
|
179
|
+
color: var(--text-muted);
|
|
180
|
+
max-width: 600px;
|
|
181
|
+
margin: 0 auto 64px;
|
|
182
|
+
}
|
|
183
|
+
.feature-grid {
|
|
184
|
+
display: grid;
|
|
185
|
+
grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
|
|
186
|
+
gap: 32px;
|
|
187
|
+
}
|
|
188
|
+
.feature-card {
|
|
189
|
+
padding: 32px;
|
|
190
|
+
background: var(--bg-light);
|
|
191
|
+
border: 1px solid var(--border);
|
|
192
|
+
border-radius: 16px;
|
|
193
|
+
transition: border-color 0.2s;
|
|
194
|
+
}
|
|
195
|
+
.feature-card:hover { border-color: var(--primary); }
|
|
196
|
+
.feature-card .icon {
|
|
197
|
+
width: 48px;
|
|
198
|
+
height: 48px;
|
|
199
|
+
background: var(--gradient);
|
|
200
|
+
border-radius: 12px;
|
|
201
|
+
display: flex;
|
|
202
|
+
align-items: center;
|
|
203
|
+
justify-content: center;
|
|
204
|
+
font-size: 1.5rem;
|
|
205
|
+
margin-bottom: 20px;
|
|
206
|
+
}
|
|
207
|
+
.feature-card h3 { font-size: 1.25rem; margin-bottom: 12px; }
|
|
208
|
+
.feature-card p { color: var(--text-muted); }
|
|
209
|
+
|
|
210
|
+
/* How it works */
|
|
211
|
+
.how-it-works {
|
|
212
|
+
padding: 100px 0;
|
|
213
|
+
background: var(--bg-light);
|
|
214
|
+
}
|
|
215
|
+
.how-it-works h2 {
|
|
216
|
+
font-size: 2.5rem;
|
|
217
|
+
text-align: center;
|
|
218
|
+
margin-bottom: 64px;
|
|
219
|
+
}
|
|
220
|
+
.steps {
|
|
221
|
+
display: grid;
|
|
222
|
+
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
|
223
|
+
gap: 32px;
|
|
224
|
+
}
|
|
225
|
+
.step {
|
|
226
|
+
text-align: center;
|
|
227
|
+
}
|
|
228
|
+
.step-number {
|
|
229
|
+
width: 48px;
|
|
230
|
+
height: 48px;
|
|
231
|
+
background: var(--gradient);
|
|
232
|
+
border-radius: 50%;
|
|
233
|
+
display: flex;
|
|
234
|
+
align-items: center;
|
|
235
|
+
justify-content: center;
|
|
236
|
+
font-weight: 700;
|
|
237
|
+
font-size: 1.25rem;
|
|
238
|
+
margin: 0 auto 20px;
|
|
239
|
+
}
|
|
240
|
+
.step h3 { margin-bottom: 12px; }
|
|
241
|
+
.step p { color: var(--text-muted); font-size: 0.95rem; }
|
|
242
|
+
.step code {
|
|
243
|
+
display: block;
|
|
244
|
+
background: var(--bg);
|
|
245
|
+
padding: 12px;
|
|
246
|
+
border-radius: 8px;
|
|
247
|
+
font-family: 'JetBrains Mono', monospace;
|
|
248
|
+
font-size: 0.85rem;
|
|
249
|
+
margin-top: 16px;
|
|
250
|
+
color: var(--primary);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/* Pricing */
|
|
254
|
+
.pricing { padding: 100px 0; }
|
|
255
|
+
.pricing h2 {
|
|
256
|
+
font-size: 2.5rem;
|
|
257
|
+
text-align: center;
|
|
258
|
+
margin-bottom: 16px;
|
|
259
|
+
}
|
|
260
|
+
.pricing-sub {
|
|
261
|
+
text-align: center;
|
|
262
|
+
color: var(--text-muted);
|
|
263
|
+
margin-bottom: 64px;
|
|
264
|
+
}
|
|
265
|
+
.pricing-grid {
|
|
266
|
+
display: grid;
|
|
267
|
+
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
|
268
|
+
gap: 24px;
|
|
269
|
+
max-width: 1000px;
|
|
270
|
+
margin: 0 auto;
|
|
271
|
+
}
|
|
272
|
+
.pricing-card {
|
|
273
|
+
background: var(--bg-light);
|
|
274
|
+
border: 1px solid var(--border);
|
|
275
|
+
border-radius: 16px;
|
|
276
|
+
padding: 32px;
|
|
277
|
+
}
|
|
278
|
+
.pricing-card.featured {
|
|
279
|
+
border-color: var(--primary);
|
|
280
|
+
position: relative;
|
|
281
|
+
}
|
|
282
|
+
.pricing-card.featured::before {
|
|
283
|
+
content: 'Popular';
|
|
284
|
+
position: absolute;
|
|
285
|
+
top: -12px;
|
|
286
|
+
left: 50%;
|
|
287
|
+
transform: translateX(-50%);
|
|
288
|
+
background: var(--gradient);
|
|
289
|
+
padding: 4px 16px;
|
|
290
|
+
border-radius: 100px;
|
|
291
|
+
font-size: 0.8rem;
|
|
292
|
+
font-weight: 600;
|
|
293
|
+
}
|
|
294
|
+
.pricing-card h3 { font-size: 1.5rem; margin-bottom: 8px; }
|
|
295
|
+
.pricing-card .price {
|
|
296
|
+
font-size: 3rem;
|
|
297
|
+
font-weight: 700;
|
|
298
|
+
margin-bottom: 8px;
|
|
299
|
+
}
|
|
300
|
+
.pricing-card .price span { font-size: 1rem; color: var(--text-muted); }
|
|
301
|
+
.pricing-card .desc { color: var(--text-muted); margin-bottom: 24px; }
|
|
302
|
+
.pricing-card ul {
|
|
303
|
+
list-style: none;
|
|
304
|
+
margin-bottom: 32px;
|
|
305
|
+
}
|
|
306
|
+
.pricing-card li {
|
|
307
|
+
padding: 8px 0;
|
|
308
|
+
display: flex;
|
|
309
|
+
align-items: center;
|
|
310
|
+
gap: 12px;
|
|
311
|
+
}
|
|
312
|
+
.pricing-card li::before {
|
|
313
|
+
content: '✓';
|
|
314
|
+
color: var(--success);
|
|
315
|
+
font-weight: bold;
|
|
316
|
+
}
|
|
317
|
+
.pricing-card .btn { width: 100%; text-align: center; }
|
|
318
|
+
|
|
319
|
+
/* CTA */
|
|
320
|
+
.final-cta {
|
|
321
|
+
padding: 100px 0;
|
|
322
|
+
background: var(--bg-light);
|
|
323
|
+
text-align: center;
|
|
324
|
+
}
|
|
325
|
+
.final-cta h2 {
|
|
326
|
+
font-size: 2.5rem;
|
|
327
|
+
margin-bottom: 24px;
|
|
328
|
+
}
|
|
329
|
+
.final-cta p {
|
|
330
|
+
color: var(--text-muted);
|
|
331
|
+
font-size: 1.1rem;
|
|
332
|
+
margin-bottom: 32px;
|
|
333
|
+
}
|
|
334
|
+
.final-cta .hero-code { margin-bottom: 32px; }
|
|
335
|
+
|
|
336
|
+
/* Footer */
|
|
337
|
+
footer {
|
|
338
|
+
padding: 48px 0;
|
|
339
|
+
border-top: 1px solid var(--border);
|
|
340
|
+
}
|
|
341
|
+
footer .container {
|
|
342
|
+
display: flex;
|
|
343
|
+
justify-content: space-between;
|
|
344
|
+
align-items: center;
|
|
345
|
+
flex-wrap: wrap;
|
|
346
|
+
gap: 24px;
|
|
347
|
+
}
|
|
348
|
+
.footer-links { display: flex; gap: 32px; }
|
|
349
|
+
.footer-links a {
|
|
350
|
+
color: var(--text-muted);
|
|
351
|
+
text-decoration: none;
|
|
352
|
+
font-size: 0.9rem;
|
|
353
|
+
}
|
|
354
|
+
.footer-links a:hover { color: var(--text); }
|
|
355
|
+
.footer-copy { color: var(--text-muted); font-size: 0.9rem; }
|
|
356
|
+
|
|
357
|
+
@media (max-width: 768px) {
|
|
358
|
+
.nav-links { display: none; }
|
|
359
|
+
.hero { padding: 60px 0 40px; }
|
|
360
|
+
.hero-code { padding: 16px 20px; font-size: 0.9rem; }
|
|
361
|
+
}
|
|
362
|
+
</style>
|
|
363
|
+
</head>
|
|
364
|
+
<body>
|
|
365
|
+
<nav>
|
|
366
|
+
<div class="container">
|
|
367
|
+
<a href="/" class="logo">wmcp-<span>annotate</span></a>
|
|
368
|
+
<div class="nav-links">
|
|
369
|
+
<a href="#features">Features</a>
|
|
370
|
+
<a href="#pricing">Pricing</a>
|
|
371
|
+
<a href="https://github.com/avatarconsulting/wmcp-annotate">GitHub</a>
|
|
372
|
+
<a href="https://github.com/avatarconsulting/wmcp-annotate#readme">Docs</a>
|
|
373
|
+
<a href="#pricing" class="btn btn-primary" style="padding: 10px 20px;">Get Started</a>
|
|
374
|
+
</div>
|
|
375
|
+
</div>
|
|
376
|
+
</nav>
|
|
377
|
+
|
|
378
|
+
<section class="hero">
|
|
379
|
+
<div class="container">
|
|
380
|
+
<div class="hero-badge">
|
|
381
|
+
<span>●</span> Now supporting Chrome 146 + WebMCP
|
|
382
|
+
</div>
|
|
383
|
+
<h1>Make Any Website<br><span class="highlight">AI-Agent Ready</span><br>in 5 Minutes</h1>
|
|
384
|
+
<p class="hero-sub">Automatically generate WebMCP tool annotations for your site. Let AI agents interact with your web app through the new W3C standard.</p>
|
|
385
|
+
<div class="hero-code">
|
|
386
|
+
<span class="prompt">$</span> <span class="cmd">npx wmcp-annotate generate https://your-site.com</span>
|
|
387
|
+
</div>
|
|
388
|
+
<div class="cta-buttons">
|
|
389
|
+
<a href="#pricing" class="btn btn-primary">Get Started Free</a>
|
|
390
|
+
<a href="https://github.com/avatarconsulting/wmcp-annotate" class="btn btn-secondary">View on GitHub</a>
|
|
391
|
+
</div>
|
|
392
|
+
</div>
|
|
393
|
+
</section>
|
|
394
|
+
|
|
395
|
+
<section class="problem">
|
|
396
|
+
<div class="container">
|
|
397
|
+
<h2>AI Agents Can't Use Your Website. Yet.</h2>
|
|
398
|
+
<p class="problem-sub">Google and Microsoft shipped WebMCP in Chrome 146—a W3C standard that lets websites declare tools for AI. Without it, agents resort to...</p>
|
|
399
|
+
<div class="problem-grid">
|
|
400
|
+
<div class="problem-card">
|
|
401
|
+
<div class="icon">❌</div>
|
|
402
|
+
<h3>Fragile DOM Scraping</h3>
|
|
403
|
+
<p>CSS changes break everything. Selectors drift. Automations fail silently.</p>
|
|
404
|
+
</div>
|
|
405
|
+
<div class="problem-card">
|
|
406
|
+
<div class="icon">💸</div>
|
|
407
|
+
<h3>Expensive Screenshots</h3>
|
|
408
|
+
<p>2000+ tokens per page to analyze a screenshot. Adds up fast at scale.</p>
|
|
409
|
+
</div>
|
|
410
|
+
<div class="problem-card">
|
|
411
|
+
<div class="icon">🔄</div>
|
|
412
|
+
<h3>Constant Maintenance</h3>
|
|
413
|
+
<p>Every UI update means updating automation scripts. Endless busywork.</p>
|
|
414
|
+
</div>
|
|
415
|
+
</div>
|
|
416
|
+
</div>
|
|
417
|
+
</section>
|
|
418
|
+
|
|
419
|
+
<section class="features" id="features">
|
|
420
|
+
<div class="container">
|
|
421
|
+
<h2>From Zero to AI-Ready in One Command</h2>
|
|
422
|
+
<p class="features-sub">wmcp-annotate handles the heavy lifting so you can focus on your product.</p>
|
|
423
|
+
<div class="feature-grid">
|
|
424
|
+
<div class="feature-card">
|
|
425
|
+
<div class="icon">🔍</div>
|
|
426
|
+
<h3>Smart Scanning</h3>
|
|
427
|
+
<p>Automatically identifies every actionable element: forms, buttons, links, API calls. Works with SPAs and auth-protected pages.</p>
|
|
428
|
+
</div>
|
|
429
|
+
<div class="feature-card">
|
|
430
|
+
<div class="icon">🤖</div>
|
|
431
|
+
<h3>AI-Powered Suggestions</h3>
|
|
432
|
+
<p>Claude-powered analysis generates meaningful tool names, descriptions, and schemas. Real semantic understanding, not just parsing.</p>
|
|
433
|
+
</div>
|
|
434
|
+
<div class="feature-card">
|
|
435
|
+
<div class="icon">💻</div>
|
|
436
|
+
<h3>Multi-Framework Output</h3>
|
|
437
|
+
<p>Generate code for vanilla JS, TypeScript, React, Vue, or Svelte. Copy-paste into your project and you're done.</p>
|
|
438
|
+
</div>
|
|
439
|
+
<div class="feature-card">
|
|
440
|
+
<div class="icon">✅</div>
|
|
441
|
+
<h3>CI Integration</h3>
|
|
442
|
+
<p>Add WebMCP validation to your CI pipeline. Catch compliance issues before they hit production.</p>
|
|
443
|
+
</div>
|
|
444
|
+
<div class="feature-card">
|
|
445
|
+
<div class="icon">🏢</div>
|
|
446
|
+
<h3>Enterprise Ready</h3>
|
|
447
|
+
<p>Team workspaces, SSO/SAML, audit logs, priority support. Built for regulated industries.</p>
|
|
448
|
+
</div>
|
|
449
|
+
<div class="feature-card">
|
|
450
|
+
<div class="icon">📊</div>
|
|
451
|
+
<h3>Compliance Reports</h3>
|
|
452
|
+
<p>Generate detailed reports for stakeholders. Show exactly which tools are implemented and their status.</p>
|
|
453
|
+
</div>
|
|
454
|
+
</div>
|
|
455
|
+
</div>
|
|
456
|
+
</section>
|
|
457
|
+
|
|
458
|
+
<section class="how-it-works">
|
|
459
|
+
<div class="container">
|
|
460
|
+
<h2>How It Works</h2>
|
|
461
|
+
<div class="steps">
|
|
462
|
+
<div class="step">
|
|
463
|
+
<div class="step-number">1</div>
|
|
464
|
+
<h3>Scan</h3>
|
|
465
|
+
<p>Analyze your site in seconds. Identify forms, buttons, and API endpoints.</p>
|
|
466
|
+
<code>wmcp-annotate scan https://your-site.com</code>
|
|
467
|
+
</div>
|
|
468
|
+
<div class="step">
|
|
469
|
+
<div class="step-number">2</div>
|
|
470
|
+
<h3>Generate</h3>
|
|
471
|
+
<p>AI generates WebMCP tool definitions with ready-to-use code.</p>
|
|
472
|
+
<code>wmcp-annotate generate https://your-site.com</code>
|
|
473
|
+
</div>
|
|
474
|
+
<div class="step">
|
|
475
|
+
<div class="step-number">3</div>
|
|
476
|
+
<h3>Integrate</h3>
|
|
477
|
+
<p>Copy the generated code into your app. That's it.</p>
|
|
478
|
+
<code>// Paste into your app</code>
|
|
479
|
+
</div>
|
|
480
|
+
<div class="step">
|
|
481
|
+
<div class="step-number">4</div>
|
|
482
|
+
<h3>Validate</h3>
|
|
483
|
+
<p>Add to CI. Never ship broken WebMCP again.</p>
|
|
484
|
+
<code>wmcp-annotate validate --ci</code>
|
|
485
|
+
</div>
|
|
486
|
+
</div>
|
|
487
|
+
</div>
|
|
488
|
+
</section>
|
|
489
|
+
|
|
490
|
+
<section class="pricing" id="pricing">
|
|
491
|
+
<div class="container">
|
|
492
|
+
<h2>Simple, Transparent Pricing</h2>
|
|
493
|
+
<p class="pricing-sub">Start free. Scale when you need to.</p>
|
|
494
|
+
<div class="pricing-grid">
|
|
495
|
+
<div class="pricing-card">
|
|
496
|
+
<h3>Open Source</h3>
|
|
497
|
+
<div class="price">$0 <span>forever</span></div>
|
|
498
|
+
<p class="desc">Perfect for individual developers</p>
|
|
499
|
+
<ul>
|
|
500
|
+
<li>Scan, generate, validate commands</li>
|
|
501
|
+
<li>10 AI suggestions per day</li>
|
|
502
|
+
<li>All output formats</li>
|
|
503
|
+
<li>Community support</li>
|
|
504
|
+
</ul>
|
|
505
|
+
<a href="https://www.npmjs.com/package/wmcp-annotate" class="btn btn-secondary">Install Free</a>
|
|
506
|
+
</div>
|
|
507
|
+
<div class="pricing-card featured">
|
|
508
|
+
<h3>Pro</h3>
|
|
509
|
+
<div class="price">$49 <span>/month</span></div>
|
|
510
|
+
<p class="desc">For teams shipping AI-ready products</p>
|
|
511
|
+
<ul>
|
|
512
|
+
<li>Everything in Free</li>
|
|
513
|
+
<li>Unlimited AI suggestions</li>
|
|
514
|
+
<li>Inject command (auto-add to codebase)</li>
|
|
515
|
+
<li>CI/CD integration</li>
|
|
516
|
+
<li>Email support</li>
|
|
517
|
+
</ul>
|
|
518
|
+
<a href="mailto:hello@avatarconsulting.com?subject=wmcp-annotate Pro" class="btn btn-primary">Start Free Trial</a>
|
|
519
|
+
</div>
|
|
520
|
+
<div class="pricing-card">
|
|
521
|
+
<h3>Enterprise</h3>
|
|
522
|
+
<div class="price">$499 <span>/month</span></div>
|
|
523
|
+
<p class="desc">For organizations at scale</p>
|
|
524
|
+
<ul>
|
|
525
|
+
<li>Everything in Pro</li>
|
|
526
|
+
<li>Team workspaces</li>
|
|
527
|
+
<li>SSO / SAML</li>
|
|
528
|
+
<li>Audit logs</li>
|
|
529
|
+
<li>Custom integrations</li>
|
|
530
|
+
<li>Priority support</li>
|
|
531
|
+
</ul>
|
|
532
|
+
<a href="mailto:enterprise@avatarconsulting.com?subject=wmcp-annotate Enterprise" class="btn btn-secondary">Contact Sales</a>
|
|
533
|
+
</div>
|
|
534
|
+
</div>
|
|
535
|
+
</div>
|
|
536
|
+
</section>
|
|
537
|
+
|
|
538
|
+
<section class="final-cta">
|
|
539
|
+
<div class="container">
|
|
540
|
+
<h2>Ready to Make Your Site AI-Ready?</h2>
|
|
541
|
+
<p>Join developers already using wmcp-annotate to ship AI-compatible products faster.</p>
|
|
542
|
+
<div class="hero-code">
|
|
543
|
+
<span class="prompt">$</span> <span class="cmd">npm install -g wmcp-annotate</span>
|
|
544
|
+
</div>
|
|
545
|
+
<div class="cta-buttons">
|
|
546
|
+
<a href="https://www.npmjs.com/package/wmcp-annotate" class="btn btn-primary">Get Started Free</a>
|
|
547
|
+
<a href="mailto:hello@avatarconsulting.com?subject=wmcp-annotate Demo" class="btn btn-secondary">Book a Demo</a>
|
|
548
|
+
</div>
|
|
549
|
+
</div>
|
|
550
|
+
</section>
|
|
551
|
+
|
|
552
|
+
<footer>
|
|
553
|
+
<div class="container">
|
|
554
|
+
<div class="footer-links">
|
|
555
|
+
<a href="https://github.com/avatarconsulting/wmcp-annotate">GitHub</a>
|
|
556
|
+
<a href="https://github.com/avatarconsulting/wmcp-annotate#readme">Documentation</a>
|
|
557
|
+
<a href="mailto:hello@avatarconsulting.com">Contact</a>
|
|
558
|
+
</div>
|
|
559
|
+
<p class="footer-copy">Built by <a href="https://avatarconsulting.com" style="color: var(--primary);">Avatar Consulting</a> — AI Transformation for Financial Services</p>
|
|
560
|
+
</div>
|
|
561
|
+
</footer>
|
|
562
|
+
</body>
|
|
563
|
+
</html>
|