Install
Two install paths. The hosted URL needs zero local setup. The npx path runs everything locally — useful for self-hosters and for keeping platform credentials off our servers.Hosted (zero install)
Point your MCP client athttps://api.letmepost.dev/mcp with your API key as a Bearer token. Works with any client that supports Streamable HTTP. A vanity mcp.letmepost.dev alias is coming.
Local (npx)
Getting an API key
Two paths. Either:- Via the CLI —
npm install -g @letmepost/cli && lmp login. Opens a browser for OAuth, then mints and stores an API key for you. Print the key withcat ~/.letmepost/config.json | jq .accessTokenand paste into your MCP client config. - Via the dashboard — dashboard.letmepost.dev/api-keys, click “Create API key”, copy the
lmp_live_...value.
Configuration
| Variable | Required | Default | Description |
|---|---|---|---|
LMP_API_KEY | yes (local) | Bearer token from the dashboard or CLI mint | |
LMP_API_BASE | no | https://api.letmepost.dev | Override when pointing at a self-hosted instance |
Tools (autogenerated)
The tool surface is generated from the canonical OpenAPI spec at startup. Tool names follow{method}_{path} with {param} segments rewritten as by_{param}. Today’s surface — 21 tools across every documented endpoint:
| Group | Tools |
|---|---|
| Posts | post_v1_posts, get_v1_posts, get_v1_posts_by_id |
| Media | get_v1_media |
| Accounts | get_v1_accounts, get_v1_accounts_by_id, delete_v1_accounts_by_id, post_v1_accounts_connect_by_platform, post_v1_accounts_connect_by_platform_complete |
| Pinterest boards | get_v1_accounts_by_id_pinterest_boards, post_v1_accounts_by_id_pinterest_boards, patch_v1_accounts_by_id_pinterest_default_board |
| API keys | post_v1_api_keys, get_v1_api_keys, delete_v1_api_keys_by_id |
| Webhooks | post_v1_webhook_endpoints, get_v1_webhook_endpoints, get_v1_webhook_endpoints_by_id, patch_v1_webhook_endpoints_by_id, delete_v1_webhook_endpoints_by_id, post_v1_webhook_endpoints_by_id_test |
inputSchema is a flat JSON schema with path / query / body fields merged into one object — the agent never has to think about which slot a field lives in. Idempotency keys are auto-injected on writes.
When endpoints are added to the API, they appear as tools on the next server restart. No code change.
Example: cross-post
Once installed, the agent composes a multi-target post in plain English:“Post ‘Shipping the MCP server today’ to X, Bluesky, and Threads.”Claude calls
post_v1_posts with:
Publish to a specific profile
When an org has multiple profiles, passprofileId to scope the publish:
profileId is forbidden when the API key is already scoped to a different profile — that surfaces as a clean validation_failed with rule: profile.scope_mismatch.
OAuth discovery
The hosted endpoint advertises full OAuth 2.1 metadata at the standard well-known URLs:https://api.letmepost.dev/.well-known/oauth-authorization-serverhttps://api.letmepost.dev/.well-known/oauth-protected-resourcehttps://api.letmepost.dev/.well-known/openid-configuration
lmp login uses this flow today; direct OAuth from MCP clients (Claude Desktop’s “OAuth connector” UI) is supported on the discovery surface and will be a one-line wiring once their UI ships. For now, paste your API key as the Bearer header.

