Mynahcast
遠端 MCP 伺服器:你的代理會以品牌語氣草擬貼文並排定發佈至 Bluesky、Mastodon、Telegram、Discord 等平台;每則貼文皆由人工審核。
託管 MCP 伺服器
npx add-mcp 'https://api.mynahcast.xyz/mcp'可安裝到 Claude Code、Codex、Cursor 等客戶端
文件
MCP server
Mynahcast runs a remote Model Context Protocol server so any MCP client (Claude Code, Claude Desktop, Cursor, Codex, Gemini CLI, OpenClaw, Hermes Agent and others) can draft, validate and schedule social media posts for your brand.
Endpoint
POST https://api.mynahcast.xyz/mcp
Transport
Streamable HTTP, stateless JSON-RPC 2.0 (initialize, tools/list, tools/call)
Auth
OAuth 2.1 sign-in (Claude, ChatGPT: paste the URL, sign in, Allow) or Authorization: Bearer myn_live_… on every request. Credentials never go in the URL.
Tools
Named mynahcast_*, filtered by the key's scopes. Every tool that changes data accepts dry_run.
Approvals
Agent keys and connected apps can't approve. Posts from agents wait in your Approvals queue.
Add to Claude
Claude on the web, desktop and mobile connects with one click: no key, you sign in to Mynahcast instead.
- In Claude, open Customize → Connectors, then Add custom connector (Team and Enterprise: an Owner adds it under Organization settings → Connectors → Add → Custom → Web).
- Paste
https://api.mynahcast.xyz/mcpas the server URL. If Claude asks how to identify itself, pick Register automatically. Click Add. - Click Connect. Sign in to Mynahcast with your email code or Google, check the workspace, and click Allow.
- Ask Claude for a post. It arrives in Approvals; nothing goes out until you approve it (unless you turned on autopilot for that brand).
Add to ChatGPT
- In ChatGPT, open Plugins (Apps & connectors on some plans; turn on developer mode if your workspace asks for it), select +, then Add custom MCP server.
- Name it Mynahcast, enter
https://api.mynahcast.xyz/mcpunder Connection, and choose OAuth for authentication. Review the warning and create it. - Connect, sign in to Mynahcast, and click Allow.
- Mention Mynahcast in a chat (type
@) and ask for a post. It waits in Approvals like any agent draft.
A connected app works like an Agent key: it can read your channels and posts, write drafts, schedule them for review and upload media. It can never approve posts, turn on autopilot, connect channels, see billing or create keys. Disconnect it any time in Agents & API → Connected apps; access ends on its next request. Trouble connecting? Write to support@mynahcast.xyz.
Connect with an API key
Claude Code, Cursor, Codex, OpenClaw and scripts can keep using a key:
- In the app, open Agents & API → Create key and pick the Agent preset. Copy the key; it's shown once.
- Add the server to your client with the key as a bearer header (examples below, and one page per agent in Connect agents).
- List the tools to check the connection, then ask your agent for a post. It lands in Approvals.
Client configs
Claude Code:
Terminal
claude mcp add --transport http mynahcast https://api.mynahcast.xyz/mcp \
--header "Authorization: Bearer $MYNAHCAST_KEY"
Most clients that read an mcpServers file (Cursor, Kimi Code, Manus import):
mcpServers
{
"mcpServers": {
"mynahcast": {
"url": "https://api.mynahcast.xyz/mcp",
"headers": { "Authorization": "Bearer myn_live_…" }
}
}
}
Raw JSON-RPC, to see the tool list:
curl
curl -X POST https://api.mynahcast.xyz/mcp \
-H "Authorization: Bearer $MYNAHCAST_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Distribution autopilot: product context and styles
Your agent does all the writing. Mynahcast only stores what it saves and checks it. Save your product once, then a style or two:
tools/call
{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"mynahcast_set_product_context","arguments":{
"brandId":"<brandId>","productName":"Acme CI","url":"https://acme.dev",
"oneLiner":"CI that fixes flaky tests","audience":"Solo devs shipping SaaS",
"problemsSolved":["flaky tests"],"features":["auto-retry"],
"proof":[{"quote":"Cut our CI time in half","source":"a beta user"}],
"ctaUrl":"https://acme.dev/start","bannedClaims":["guaranteed uptime"]}}}
tools/call
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"mynahcast_save_style","arguments":{
"brandId":"<brandId>","name":"Build in public","sourceReference":"patterns from a dev-tool founder I follow",
"hookPatterns":["a number + a surprising result","a mistake + the fix"],
"tone":"plain, first person","postLength":"under 280 characters","slideCount":6,
"colors":{"background":"#ffffff","text":"#111111","accent":"#3b5ba9"},
"fonts":{"heading":"Inter","body":"Inter"},"isDefault":true}}}
A style holds general patterns only. Agents must never copy a reference account's wording, images, logos, branding or identity.
Distribution autopilot: content memory and the duplicate-hook check
Every post you create is remembered per channel with its hook (the opening line), a topic, the main claim, the style, its status (draft, approved, rejected, published, failed) and, when a reviewer rejects it, the reason. Read it before you write the next batch:
tools/call
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"mynahcast_get_content_memory","arguments":{
"brandId":"<brandId>","limit":50,"status":"rejected"}}}
Leave the topic and claim with each post so later batches can avoid them:
tools/call
{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"mynahcast_create_post","arguments":{
"brandId":"<brandId>","content":{"body":"We rebuilt onboarding in a weekend. Signups doubled."},
"targets":[{"channelId":"<channelId>"}],"schedule":{"at":"2026-10-21T09:30:00+02:00"},
"memory":{"topic":"onboarding","mainClaim":"signups doubled","styleId":"<styleId>"}}}}
A post whose hook is a near-duplicate (normalised text, no AI) of one published on the same channel in the last 30 days is refused with a conflict error that names the earlier post and says what to change. Pass memory.allowDuplicateHook: true only when repeating on purpose.
Tools
Every name is prefixed mynahcast_
Posts8
validate_postCheck a post against every target channel without saving itcreate_postCreate a post for one brand, fanned out to one or more channelsget_postRead one post with its per-channel delivery statelist_postsList posts, filtered by status, channel and time rangeupdate_postEdit a post (an edit voids an earlier approval)reschedule_postMove a post to a new timedelete_postDelete a post and cancel deliveries that haven't gone outget_post_timelineEvery delivery attempt for a post, with platform responses
Approvals2
submit_for_approvalAsk a human to approve a postdecide_approvalApprove or request changes (humans only; agents are refused)
Channels2
list_channelsList connected channels and their healthget_channel_capabilitiesLimits for one channel (characters, media, threads)
Media2
request_uploadGet a signed URL to upload mediacomplete_uploadMark an upload as finished
Brand voice & context4
get_brand_voiceRead the brand's voice profileupdate_brand_voicePublish a new voice version (publisher keys)get_product_contextRead the product context before writing a postset_product_contextSave what your product is: URL, one-liner, audience, problems, features, proof, CTA, banned claims
Styles & memory5
save_styleSave a style: general patterns from a reference account, never copieslist_stylesList the brand's styles (default first)get_styleRead one style: hooks, tone, length, slides, colours, fontsdelete_styleDelete a styleget_content_memoryWhat was drafted, published or rejected: hooks, topics, claims, reasons
Batches & automation4
get_batch_promptReady weekly instruction to paste into your own agent (claude -p, codex exec)submit_batchSubmit a weekly batch: validated, auto-scheduled within daily caps, approval per modeapprove_batchRelease a whole batch with one approval (humans only)set_autopilot_settingsSet approval mode (each_post, whole_batch, autopilot) and per-channel daily cap (admin keys)
Safety2
stop_allEmergency stop: hold every scheduled post of a brandresume_allResume publishing after stop_all
How sign-in works
The server accepts two credentials on Authorization: Bearer …: a Mynahcast API key, or an OAuth 2.1 access token. Without one, POST /mcp answers 401 with a WWW-Authenticate header pointing at https://api.mynahcast.xyz/.well-known/oauth-protected-resource/mcp (RFC 9728), so MCP clients discover the authorization server by themselves. It supports Dynamic Client Registration, the authorization code flow with PKCE (S256 only), refresh token rotation and token revocation. Access tokens last an hour and work only on the MCP endpoint they were issued for.
Same operations over REST
Every MCP tool maps one-to-one to a REST operation under /v1, described by https://api.mynahcast.xyz/v1/openapi.json. See the API reference.