@link.me/mcp 0.2.55 → 0.3.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/README.md +85 -29
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -83,7 +83,9 @@ linkme config show --json | jq -r '.token'
|
|
|
83
83
|
|
|
84
84
|
## Available Tools
|
|
85
85
|
|
|
86
|
-
The MCP server exposes
|
|
86
|
+
The MCP server exposes 170+ tools covering the full Linkme platform. All tools return structured JSON (both a text block and, on success, matching `structuredContent`).
|
|
87
|
+
|
|
88
|
+
Every tool is annotated with [MCP tool annotations](https://modelcontextprotocol.io/docs/concepts/tools#tool-annotations) (`readOnlyHint`, `destructiveHint`, `idempotentHint`) so hosts can surface expected behavior before a call. Tools backed by a destructive CLI command (delete, cancel, reset, etc.) are marked `destructiveHint: true` and their description is suffixed with `(Destructive: executes immediately without a confirmation prompt.)` — the underlying `--force` flag is auto-injected and these tools run immediately with no confirmation step, so check annotations/descriptions before calling them.
|
|
87
89
|
|
|
88
90
|
### Profile & Identity
|
|
89
91
|
|
|
@@ -107,33 +109,40 @@ The MCP server exposes 100+ tools covering the full Linkme platform. All tools r
|
|
|
107
109
|
|
|
108
110
|
| Tool | Description |
|
|
109
111
|
|------|-------------|
|
|
110
|
-
| `links_list` | List
|
|
111
|
-
| `links_add` | Add a link |
|
|
112
|
-
| `links_edit` | Edit a link |
|
|
113
|
-
| `links_delete` | Delete a link |
|
|
114
|
-
| `
|
|
115
|
-
| `
|
|
116
|
-
| `
|
|
117
|
-
| `
|
|
118
|
-
| `
|
|
119
|
-
| `
|
|
112
|
+
| `links_list` | List custom and platform links |
|
|
113
|
+
| `links_add` | Add a custom link |
|
|
114
|
+
| `links_edit` | Edit a custom link |
|
|
115
|
+
| `links_delete` | Delete a custom link |
|
|
116
|
+
| `links_set` | Set a platform/social link |
|
|
117
|
+
| `links_unset` | Remove a platform/social link |
|
|
118
|
+
| `links_platform_list\|set\|delete` | Platform links (shared link system) |
|
|
119
|
+
| `links_schedule_list\|create\|edit\|delete\|publish-now\|cancel` | Scheduled links |
|
|
120
|
+
| `featured_list\|add\|edit\|delete\|reorder` | Featured links |
|
|
121
|
+
| `featured_headers_*`, `featured_multilinks_*` | Featured headers and multilinks |
|
|
120
122
|
|
|
121
123
|
### AP (Post on All Platforms)
|
|
122
124
|
|
|
123
125
|
| Tool | Description |
|
|
124
126
|
|------|-------------|
|
|
125
127
|
| `ap_accounts` | List connected accounts |
|
|
126
|
-
| `ap_connect` | Connect a provider |
|
|
127
128
|
| `ap_disconnect` | Disconnect a provider |
|
|
129
|
+
| `ap_upload` | Upload a video for posting |
|
|
130
|
+
| `ap_limits` | Show plan limits and remaining quota |
|
|
128
131
|
| `ap_post_list` | List posts |
|
|
132
|
+
| `ap_post_calendar` | Posts in a date range |
|
|
129
133
|
| `ap_post_create` | Create a post |
|
|
130
134
|
| `ap_post_status` | Check post status |
|
|
131
135
|
| `ap_post_publish` | Publish a draft |
|
|
132
|
-
| `ap_post_cancel` | Cancel a post |
|
|
136
|
+
| `ap_post_cancel` | Cancel a post (whole post or specific targets) |
|
|
133
137
|
| `ap_post_retry` | Retry a failed post |
|
|
134
|
-
| `
|
|
138
|
+
| `ap_post_reschedule` | Update caption/schedule of a scheduled post |
|
|
139
|
+
| `ap_post_insights` | Per-target live insights |
|
|
140
|
+
| `ap_post_comments` | Per-target comments |
|
|
141
|
+
| `ap_analytics_post` | Post analytics |
|
|
135
142
|
| `ap_analytics_accounts` | Account-wide analytics |
|
|
136
143
|
|
|
144
|
+
Connecting a provider (`linkme ap connect`) is an interactive OAuth flow and is CLI-only.
|
|
145
|
+
|
|
137
146
|
### Analytics
|
|
138
147
|
|
|
139
148
|
| Tool | Description |
|
|
@@ -152,52 +161,99 @@ The MCP server exposes 100+ tools covering the full Linkme platform. All tools r
|
|
|
152
161
|
| `email_test` | Send a test email |
|
|
153
162
|
| `email_history` | Campaign history |
|
|
154
163
|
| `email_detail` | Campaign details |
|
|
164
|
+
| `email_recipients` | List campaign recipients |
|
|
155
165
|
| `email_cancel` | Cancel a campaign |
|
|
156
|
-
| `email_domains` | Sending domains |
|
|
157
166
|
| `email_upload-image` | Upload an image |
|
|
158
|
-
| `
|
|
159
|
-
| `
|
|
160
|
-
| `
|
|
167
|
+
| `email_domains_list` | List sending domains (verified and pending) |
|
|
168
|
+
| `email_domains_add` | Add a sending domain |
|
|
169
|
+
| `email_domains_verify` | Check DNS verification status |
|
|
170
|
+
| `email_templates_list\|get\|create\|update\|delete` | Email templates |
|
|
161
171
|
|
|
162
172
|
### Commerce & Shop
|
|
163
173
|
|
|
164
174
|
| Tool | Description |
|
|
165
175
|
|------|-------------|
|
|
166
176
|
| `commerce_products_list` | List digital products |
|
|
167
|
-
| `commerce_products_create` | Create a product |
|
|
168
|
-
| `
|
|
169
|
-
| `
|
|
177
|
+
| `commerce_products_create` | Create a digital product |
|
|
178
|
+
| `commerce_products_edit` | Edit a digital product |
|
|
179
|
+
| `commerce_products_reorder` | Reorder digital products |
|
|
180
|
+
| `commerce_products_orders` | List digital product sales |
|
|
181
|
+
| `commerce_products_delete` | Delete a digital product |
|
|
182
|
+
| `commerce_merch_list\|categories` | Merch catalog |
|
|
183
|
+
| `shop_products_list\|add\|edit\|delete` | Physical shop products |
|
|
170
184
|
| `shop_categories_list\|add\|edit\|reorder\|delete` | Shop categories |
|
|
171
185
|
|
|
172
186
|
### Other Tools
|
|
173
187
|
|
|
174
188
|
| Tool | Description |
|
|
175
189
|
|------|-------------|
|
|
190
|
+
| `search` | Search Linkme users |
|
|
191
|
+
| `username_check` | Check username availability |
|
|
192
|
+
| `waitlist_status\|join` | Feature waitlists (e.g. AP) |
|
|
176
193
|
| `contacts_list` | List contacts |
|
|
177
194
|
| `contacts_stats` | Contact analytics |
|
|
178
|
-
| `
|
|
179
|
-
| `
|
|
195
|
+
| `gallery_upload\|list\|delete` | Gallery media |
|
|
196
|
+
| `profile_video_show\|set\|remove` | Profile video |
|
|
197
|
+
| `profile_forms_*`, `profile_events_*` | Forms and events |
|
|
198
|
+
| `auth_login\|logout\|resume` | Authentication |
|
|
199
|
+
| `auth_sessions_list\|revoke` | Session management |
|
|
180
200
|
| `config_show\|set\|reset` | Configuration |
|
|
181
|
-
| `automations_*` | Instagram automations (
|
|
182
|
-
| `courses_*` | Course management |
|
|
201
|
+
| `automations_*` | Instagram automations (16 tools) |
|
|
202
|
+
| `courses_*` | Course management (incl. `courses_videos_upload`) |
|
|
183
203
|
| `feeds_*` | Feed subscriptions |
|
|
184
204
|
| `reviews_*` | Review subscriptions |
|
|
185
205
|
| `agency_*` | Agency management |
|
|
206
|
+
| `skill_list\|show` | Bundled agent skill docs |
|
|
207
|
+
|
|
208
|
+
## Hosted / Remote Server (Streamable HTTP)
|
|
209
|
+
|
|
210
|
+
Besides the stdio binary, the server can run as a remote MCP endpoint over [Streamable HTTP](https://modelcontextprotocol.io/specification/basic/transports#streamable-http) — the transport required for the claude.ai connectors directory and the ChatGPT Apps ecosystem:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
PORT=8788 linkme-mcp-http # or: bun run start:mcp-http
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
- `POST /mcp` — the MCP endpoint (stateless; one request per call, safe for serverless).
|
|
217
|
+
- Auth is per-request: `Authorization: Bearer <linkme-token>`. Requests without a token get a `401` with a `WWW-Authenticate` header pointing at the RFC 9728 metadata.
|
|
218
|
+
- `GET /.well-known/oauth-protected-resource/mcp` — protected-resource metadata.
|
|
219
|
+
- `GET /healthz` — health probe.
|
|
220
|
+
|
|
221
|
+
### Sign in with Linkme (claude.ai / Claude Desktop / ChatGPT)
|
|
222
|
+
|
|
223
|
+
The hosted server supports OAuth 2.1, so no token setup is needed: add `https://mcp.link.me/mcp` as a custom connector in claude.ai, Claude Desktop, or ChatGPT and sign in with your Linkme account when prompted. No CLI or npm install required.
|
|
224
|
+
|
|
225
|
+
Self-hosting operators: see `docs/mcp-oauth.md` in the source repository for configuration.
|
|
226
|
+
- The process is multi-tenant safe: the bearer token is scoped to the request, local CLI profiles are never read, and only `LINKME_API_URL` / `LINKME_AUTH_URL` / `LINKME_AP_URL` are forwarded from the host environment.
|
|
227
|
+
|
|
228
|
+
The handler is built on the SDK's web-standard transport (`Request`/`Response`), so `createMcpHttpHandler()` from `mcp/http-server.ts` also runs unchanged on Cloudflare Workers, Deno, or any fetch-based runtime.
|
|
229
|
+
|
|
230
|
+
### Cloudflare Workers deploy
|
|
231
|
+
|
|
232
|
+
A ready-to-deploy Worker lives in `workers/` (`mcp-worker.ts` + `wrangler.jsonc`):
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
bun run dev:mcp-worker # local workerd via wrangler dev
|
|
236
|
+
bun run deploy:mcp-worker # wrangler deploy (requires wrangler login)
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
- Requires the `nodejs_compat` compatibility flag (already configured) — commands write config to workerd's in-memory virtual `/tmp`, never to real disk.
|
|
240
|
+
- `workers/stubs/` aliases two transitive deps that misbehave on workerd: `when-exit` (browser build references `window`) and `atomically` (temp-file rename fails on the virtual fs; a plain write is equivalent there).
|
|
241
|
+
- Set `LINKME_OAUTH_ISSUERS` (and optionally `LINKME_API_URL` / `LINKME_AUTH_URL` / `LINKME_AP_URL`) as Worker vars.
|
|
242
|
+
- Known limitation: `skill_list` / `skill_show` return an in-band tool error on Workers — skill markdown files are not bundled into the Worker.
|
|
186
243
|
|
|
187
244
|
## Environment Variables
|
|
188
245
|
|
|
189
246
|
| Variable | Description |
|
|
190
247
|
|----------|-------------|
|
|
191
248
|
| `LINKME_TOKEN` | Auth token (required) |
|
|
192
|
-
| `LINKME_API_URL` | Override API
|
|
193
|
-
| `
|
|
194
|
-
| `LINKME_AP_URL` | Override AP service URL |
|
|
249
|
+
| `LINKME_API_URL` | Override core API gateway (fallback for user/analytics/commerce/email) |
|
|
250
|
+
| `LINKME_<SERVICE>_URL` | Per-service overrides — see `linkme config endpoints` for the full list |
|
|
195
251
|
|
|
196
252
|
## How It Works
|
|
197
253
|
|
|
198
254
|
The MCP server uses stdio transport and exposes each CLI command as an MCP tool. Tool inputs are derived from the same Zod schemas used by the CLI. All tools run in JSON mode with color disabled, returning structured responses suitable for LLM consumption.
|
|
199
255
|
|
|
200
|
-
|
|
256
|
+
Commands that genuinely require a terminal are excluded from the MCP tool set: shell completion, browser OAuth flows (`ap connect`, `automations authorize`), profile switching (`auth switch`), and interactive reordering (`links reorder`). Upload commands (`ap_upload`, `gallery_upload`, `courses_videos_upload`, `email_upload-image`, `profile_video_set`) are fully flag-driven and ARE available as tools.
|
|
201
257
|
|
|
202
258
|
## CLI
|
|
203
259
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@link.me/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Linkme platform MCP server for Claude, Cursor, and other AI agents",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"bin": {
|
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
"ai"
|
|
17
17
|
],
|
|
18
18
|
"optionalDependencies": {
|
|
19
|
-
"@link.me/mcp-darwin-arm64": "0.
|
|
20
|
-
"@link.me/mcp-darwin-x64": "0.
|
|
21
|
-
"@link.me/mcp-linux-x64": "0.
|
|
22
|
-
"@link.me/mcp-linux-arm64": "0.
|
|
23
|
-
"@link.me/mcp-windows-x64": "0.
|
|
19
|
+
"@link.me/mcp-darwin-arm64": "0.3.0",
|
|
20
|
+
"@link.me/mcp-darwin-x64": "0.3.0",
|
|
21
|
+
"@link.me/mcp-linux-x64": "0.3.0",
|
|
22
|
+
"@link.me/mcp-linux-arm64": "0.3.0",
|
|
23
|
+
"@link.me/mcp-windows-x64": "0.3.0"
|
|
24
24
|
}
|
|
25
25
|
}
|