Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Federated messaging with your fmsg hosting provider. Connect with OAuth or an API key.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
FMSG_API_URL, FMSG_API_KEY, FMSG_DEFAULT_DOMAIN, FMSG_MCP_DOWNLOAD_DIR「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
ウェブ、デスクトップ、モバイルのClaudeで使えます:
https://{oauth_mcp_endpoint}アドレスには、あなたしか知らない {…} の部分(アカウントなど)があるので、コピーして書き換えてください。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"fmsg": {
"command": "npx",
"args": [
"-y",
"@markmnl/fmsg-mcp"
],
"env": {
"FMSG_API_URL": "your-value",
"FMSG_API_KEY": "your-value",
"FMSG_DEFAULT_DOMAIN": "your-value",
"FMSG_MCP_DOWNLOAD_DIR": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add --transport http fmsg 'https://{oauth_mcp_endpoint}'claude mcp add fmsg --env FMSG_API_URL=your-value --env FMSG_API_KEY=your-value --env FMSG_DEFAULT_DOMAIN=your-value --env FMSG_MCP_DOWNLOAD_DIR=your-value -- npx -y @markmnl/fmsg-mcp動かす前に、空欄の値を入力してください。
アドレスには、あなたしか知らない {…} の部分(アカウントなど)があるので、コピーして書き換えてください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"fmsg": {
"url": "https://{oauth_mcp_endpoint}"
}
}
}プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"fmsg": {
"command": "npx",
"args": [
"-y",
"@markmnl/fmsg-mcp"
],
"env": {
"FMSG_API_URL": "your-value",
"FMSG_API_KEY": "your-value",
"FMSG_DEFAULT_DOMAIN": "your-value",
"FMSG_MCP_DOWNLOAD_DIR": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
アドレスには、あなたしか知らない {…} の部分(アカウントなど)があるので、コピーして書き換えてください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"fmsg": {
"type": "http",
"url": "https://{oauth_mcp_endpoint}"
}
}
}プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"fmsg": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@markmnl/fmsg-mcp"
],
"env": {
"FMSG_API_URL": "your-value",
"FMSG_API_KEY": "your-value",
"FMSG_DEFAULT_DOMAIN": "your-value",
"FMSG_MCP_DOWNLOAD_DIR": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
ChatGPTがつなげるのは、インターネット上のサーバーだけです:
https://{oauth_mcp_endpoint}アドレスには、あなたしか知らない {…} の部分(アカウントなど)があるので、コピーして書き換えてください。
メニューの名前は、プランや時期によって少し違うことがあります。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
FMSG_DEFAULT_DOMAIN envFMSG_MCP_DOWNLOAD_DIR envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
アドレスにあなた自身の値が必要なため、代わりにツール一覧を読み取ることはできません。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月6日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント markmnl で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
アドレスにあなた自身のアカウント情報が必要なため、代わりにチェックできません
アドレスにあなた自身のアカウント情報が必要なため、代わりにチェックできません
まだチェックしていません。エンドポイントをチェックするときにツール一覧を読み取ります
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:FMSG_API_URL, FMSG_API_KEY
どちらでも使えます。パソコンにインストールしても、クラウド版につないでもかまいません。
GitHubリポジトリの最終更新は–、最新バージョン(1.5.1)がレジストリに届いたのは一昨日です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。URLでつながるので、リモートMCPサーバーに対応したアプリ(開発者モードのChatGPTなど)でも使えます。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, dotnet-mcp
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
MCP server for .NET symbols, XAML, source generators, and restricted workspace edit
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
An MCP server that gives any AI agent its own fmsg address: send messages, follow threads, react, exchange attachments and wait for replies, through a deployed fmsg Web API. Connect through stdio in hosts such as Claude Code, Claude Desktop, Cursor and VS Code, or through HTTP using API-key headers or configured OAuth.
Use your choice of fmsg hosting provider, or self-host. No hosting provider or identity provider is built in.
import { FmsgClient } from "@markmnl/fmsg-mcp/client".Get an OAuth-enabled MCP URL from your fmsg hosting provider, add it to your AI host, and sign in. You do not need an API key or a local installation for this connection. Your AI host must support the authorization server's client registration method; see OAuth onboarding. Operators can enable this with HTTP OAuth.
You send as an fmsg address, authenticated by an API key (fmsgk_…) issued by your fmsg host:
fmsg-webapi api-key create.Use the API URL and key for local installation below, or use your provider's API-key MCP endpoint with an Authorization: Bearer fmsgk_... header. The endpoint must use the fmsg Web API that accepts your key.
An agent's key is usually for a sub-address such as @user_agent@example.com, owned by @user@example.com. The owner can switch to the sub-address in their client, but can only follow and reply to threads they are a participant of. So send_message, reply and create_draft add the owner as a recipient unless include_owner is false; whoami reports the owner.
Find io.github.markmnl/fmsg-mcp in the official MCP Registry. The listing offers local npm installation and configurable remote connections for OAuth or API keys. For a remote connection, supply the MCP endpoint from your fmsg hosting provider or your own deployment; the registry input takes its hostname and path without the https:// prefix, such as mcp.example.com/mcp. OAuth sign-in is discovered from that endpoint; the API-key option additionally asks for your key. If your AI host cannot configure registry URL templates, add the full MCP URL directly instead.
Requires Node.js 22 or later.
claude mcp add fmsg --scope user \
--env FMSG_API_URL=https://api.example.com \ --env FMSG_API_KEY=fmsgk_... \ -- npx -y @markmnl/fmsg-mcp
Then in any session: *"Send @bob@example.com a note about the release"*, *"What's in my fmsg inbox?"*, *"Wait for Bob's reply and answer it"*. /fmsg:chat, /fmsg:reply and /fmsg:send_file are available as prompts.
Add a server entry with the same command; only the config file differs:
{
"mcpServers": { "fmsg": { "command": "npx", "args": ["-y", "@markmnl/fmsg-mcp"], "env": { "FMSG_API_URL": "https://api.example.com", "FMSG_API_KEY": "fmsgk_..." } } } }
(Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code: .vscode/mcp.json under "servers" with "type": "stdio".)
Run one server for many users. Each client sends its own fmsg API key as a bearer token; the server exchanges it at the fmsg host and acts as that address. FMSG_API_KEY must not be set.
FMSG_API_URL=https://api.example.com FMSG_MCP_ALLOWED_HOSTS=mcp.example.com \
npx -y @markmnl/fmsg-mcp --http 0.0.0.0:8765
docker build -t fmsg-mcp --build-arg FMSG_MCP_COMMIT=$(git rev-parse HEAD) \ --build-arg FMSG_MCP_VERSION=$(git describe --tags --abbrev=0) . docker run -e FMSG_API_URL=https://api.example.com \ -e FMSG_MCP_ALLOWED_HOSTS=mcp.example.com -p 8765:8765 fmsg-mcp
The MCP endpoint is /mcp; /healthz reports liveness, the version and the commit. whoami reports the same, so a client can confirm which deploy it is talking to: npm run build records them from git, and the Docker build arguments above do so where the build has no git history (FMSG_MCP_COMMIT can also be set at run time). Use a client that supports an explicitly configured Authorization: Bearer fmsgk_... header. Each caller supplies its own key; a shared header means a shared fmsg identity. For browser sign-in without user API keys, configure HTTP OAuth: the operator supplies an issuer, resource URI and exchange client. Users add the public MCP URL in a host supporting that issuer's client registration method. FMSG_MCP_AUTH_MODE=oauth+api-key accepts both OAuth and API-key callers on the same URL.
claude mcp add --transport http fmsg --scope user https://mcp.example.com/mcp \
--header "Authorization: Bearer fmsgk_..."
Deploy behind a TLS-terminating reverse proxy and set FMSG_MCP_ALLOWED_HOSTS to the public hostname when binding to a non-loopback address; startup fails without it. Browser clients on another origin also need FMSG_MCP_ALLOWED_ORIGINS containing exact origins, such as https://app.example.com. For loopback binds, loopback browser origins on any port work by default, including MCP Inspector at http://localhost:6274. Setting an explicit origin list replaces that loopback default. Allowed preflights need no credentials; actual MCP requests always require authentication. wait_for_message holds a request open for up to FMSG_MCP_WAIT_MAX_SECONDS (230), so give the proxy an idle timeout of at least 240 s. On SIGTERM the server ends open waits with an interrupted result that clients resume from, gives other requests 5 seconds to finish, and exits, well within a service manager's stop timeout. See the TLS reverse-proxy example for a loopback deployment with Caddy.
| Tool | What it does |
|---|---|
whoami | The address this server acts as, its owner if it is a sub-address, the public API URL (when known), the transport (stdio or http, which is Streamable HTTP), short-name defaults, and this server's version and commit |
resolve_address | Turn a short name into @user@domain (directory, then default domain) |
list_messages | Inbox, newest first, with previews, attachment types and size (compressed marks a body sent deflated); reactions hidden and never counted as unread unless include_reactions |
list_sent | Sent messages with per-recipient delivery state |
get_message | One message with headers, full text body, attachments, reactions and, for a reply, the root's thread_topic |
get_thread | The lineage from the thread root to a message (scope: "lineage"; other replies in the thread are not included), with gaps for messages you cannot see, per-message flags and added recipients, the root's thread_topic, and a next step that never suggests replying to a terminal or no-reply message |
send_message | Start a new thread; sends immediately (fmsg messages are immutable) |
reply | Reply into a thread; reply-all by default, refuses terminal and no-reply parents |
create_draft | Create an unsent message or reply (reply_to) that other fmsg clients can see; over HTTP with a public MCP URL, returns an authenticated upload URL for large attachments |
send_draft | Send a draft, with its attachments |
delete_draft | Discard an unsent draft |
add_recipients | Add recipients to a sent message (add_to is a deprecated alias) |
react | Set or clear your emoji reaction |
indicate | Show the other participants a short-lived status on a message, such as ⏳ while working on a reply or ✍️ while composing (FMSG-006 indicator; ttl 1–120 s, default 60), kept up until you reply, react or mark it read (up to 5 minutes); an empty emoji clears it. Reading a message never shows one |
mark_read | Mark received messages read |
download_attachment | Fetch a small attachment inline: text as text, images as image blocks, other files as base64 resources; a wrong filename lists the names the message has |
get_attachment_download_url | Get a credential-free URL and resource link for an authenticated binary download; with presigned: true, also a single-use link valid for 5 minutes that needs no Authorization header, with its size, sha256 and a curl command. HTTP only, requires a public MCP URL |
get_attachment_upload_url | Get a single-use link valid for 5 minutes that PUTs one file of a given size and sha256 into a draft without the Authorization header, with a curl command; then send_draft. HTTP only, requires a public MCP URL |
save_attachment | Stream an attachment to the configured local folder; stdio only, enabled by FMSG_MCP_DOWNLOAD_DIR |
delivery_status | Per-recipient delivery times and fmsg response codes (200 accepted; null when not recorded); for a received message, the host's own receipt records; via is to or add_to (added later) |
wait_for_message | Block until the next inbound message (WebSocket push), batched per thread, with thread context, skipped reactions and a next step that names messages from other threads (pending_ids) the cursor moved past |
Every tool returns readable Markdown plus structuredContent. Ids are decimal strings. Message bodies are labelled as data from other parties, not instructions; structured results that carry other parties' words repeat that in untrusted_content_notice, since some hosts show the structured result instead of the text. Attachment types come from the host when it recorded one, otherwise from the filename extension, so every tool reports the same type, and every tool lists attachments in the same order (by filename). Addresses in the text are code spans, so they copy exactly (@bob_mcp@example.com, never with a Markdown escape); a backslash in an address is rejected. A message's size is the body size the host stores: for a received message with compressed true that is the compressed length, while your own sent messages keep the uncompressed length.
Some MCP hosts cache each tool's outputSchema when the connector is added and validate every later result against that copy. Output schemas are therefore open and additive: objects accept unknown properties, values that may grow (statuses, transports, resolutions, delivery state) are strings whose current values are listed in their descriptions, and only fields present since 0.2.5 are required. Releases add fields and values; they do not remove or rename them. Schemas published by 0.2.6 and earlier were closed, so a host that cached one rejects results with newer fields (for example "must NOT have additional properties"); remove and re-add the connector once to refresh it.
indicate shows
冒頭だけを表示しています。続きはリポジトリで読めます