FirstReply MCP server
2026년 11월 13일 커밋AI 어시스턴트가 고객 지원 운영, 대화 탐색, 지식 베이스 검색 및 소셜 미디어 게시물 예약을 관리할 수 있도록 합니다.
다른 이름 FirstReply/firstreply-mcp
- 스타
- 1
- Tools
- 84
- 다운로드, 30일
- —
- 최신 버전
- —
- 마지막 커밋
- 2026년 11월 13일
- 라이선스
- MIT
FirstReply MCP란?
FirstReply은(는) MCP server입니다. AI 어시스턴트가 고객 지원 운영, 대화 탐색, 지식 베이스 검색 및 소셜 미디어 게시물 예약을 관리할 수 있도록 합니다. 84개 도구를 제공합니다. 예: organization_list, organization_get, organization_update.
프로젝트 README에서 생성된 요약
FirstReply MCP server 정보
firstreply-mcp를 사용하면 AI 어시스턴트 내에서 고객 지원과 소셜 미디어 활동을 관리할 수 있습니다. 이 MCP server는 AI 클라이언트를 FirstReply 플랫폼에 연결하여 WhatsApp, Instagram, X, 이메일을 포함한 멀티 채널 커뮤니케이션을 처리할 수 있게 합니다. 대화 탐색, 지식 베이스 검색, 연락처 관리 및 소셜 미디어 예약 관리를 위한 도구를 제공합니다.
개발자는 stdio 또는 HTTP를 통해 이 서버를 사용하여 어시스턴트에게 지원 운영 권한을 부여할 수 있습니다. 어시스턴트는 답변 초안 작성 및 번역, 지식 베이스 항목 업데이트, 다양한 플랫폼을 위한 소셜 미디어 게시물 예약 등을 수행할 수 있습니다. 또한 조직 구성원 관리, API 키 관리, 채널 통계 확인과 같은 관리 작업도 가능합니다. 모든 작업은 FirstReply REST API를 통해 범위가 지정되고 권한이 확인되므로, 대화나 구성원을 삭제하는 것과 같은 파괴적인 작업은 적절한 감독 하에 처리됩니다.
활용 사례
- 1소셜 미디어 콘텐츠 관리AI에게 특정 플랫폼을 위한 소셜 미디어 게시물을 작성, 준비 및 예약하도록 지시할 수 있습니다.
- 2지원 지식 베이스 유지 관리어시스턴트가 기존 문서를 검색하거나 지식 베이스에 새로운 질문 및 답변 항목을 추가할 수 있습니다.
- 3지원 성능 모니터링개발자가 채널 성능이나 대화 지표에 관한 통계를 요청할 수 있습니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
FirstReply MCP 도구 84
README에서 감지됨organization_listorganization_getorganization_updateorganization_usagemember_listmember_getmember_createmember_updatemember_deleteapi_key_listapi_key_createapi_key_delete
| organization_list | — | |
| organization_get | — | |
| organization_update | — | |
| organization_usage | — | |
| member_list | — | |
| member_get | — | |
| member_create | — | |
| member_update | — | |
| member_delete | — | |
| api_key_list | — | |
| api_key_create | — | |
| api_key_delete | — |
도구 84개 모두 보기도구 수 줄이기
channel_listchannel_getchannel_statisticschannel_refreshchannel_testchannel_createchannel_connectchannel_updatechannel_playstore_service_accountchannel_tiktok_creator_infoconversation_listconversation_getconversation_threadconversation_messagesconversation_replyconversation_closeconversation_readconversation_spamconversation_updateconversation_deleteconversation_statsconversation_stats_by_memberconversation_metricsconversation_totalsmessage_getmessage_updatemessage_sendmessage_deleteattachment_uploadcontact_listcontact_getcontact_createcontact_updatecontact_deletecontact_field_listpost_listpost_getpost_statisticspost_metricspost_commentspost_writepost_media_uploadpost_createpost_schedulepost_reschedulepost_analyticsclassification_listclassification_getclassification_createclassification_updateclassification_deleteclassification_impactclassification_statisticsknowledge_searchknowledge_getknowledge_createknowledge_updateknowledge_deleteknowledge_source_listknowledge_source_getknowledge_source_createknowledge_source_updateknowledge_source_deleteknowledge_source_syncknowledge_source_statusai_draft_replyai_promptai_translateai_testsearchwebhook_testwebhook_rotate_secret
| channel_list | — | |
| channel_get | — | |
| channel_statistics | — | |
| channel_refresh | — | |
| channel_test | — | |
| channel_create | — | |
| channel_connect | — | |
| channel_update | — | |
| channel_playstore_service_account | — | |
| channel_tiktok_creator_info | — | |
| conversation_list | — | |
| conversation_get | — | |
| conversation_thread | — | |
| conversation_messages | — | |
| conversation_reply | — | |
| conversation_close | — | |
| conversation_read | — | |
| conversation_spam | — | |
| conversation_update | — | |
| conversation_delete | — | |
| conversation_stats | — | |
| conversation_stats_by_member | — | |
| conversation_metrics | — | |
| conversation_totals | — | |
| message_get | — | |
| message_update | — | |
| message_send | — | |
| message_delete | — | |
| attachment_upload | — | |
| contact_list | — | |
| contact_get | — | |
| contact_create | — | |
| contact_update | — | |
| contact_delete | — | |
| contact_field_list | — | |
| post_list | — | |
| post_get | — | |
| post_statistics | — | |
| post_metrics | — | |
| post_comments | — | |
| post_write | — | |
| post_media_upload | — | |
| post_create | — | |
| post_schedule | — | |
| post_reschedule | — | |
| post_analytics | — | |
| classification_list | — | |
| classification_get | — | |
| classification_create | — | |
| classification_update | — | |
| classification_delete | — | |
| classification_impact | — | |
| classification_statistics | — | |
| knowledge_search | — | |
| knowledge_get | — | |
| knowledge_create | — | |
| knowledge_update | — | |
| knowledge_delete | — | |
| knowledge_source_list | — | |
| knowledge_source_get | — | |
| knowledge_source_create | — | |
| knowledge_source_update | — | |
| knowledge_source_delete | — | |
| knowledge_source_sync | — | |
| knowledge_source_status | — | |
| ai_draft_reply | — | |
| ai_prompt | — | |
| ai_translate | — | |
| ai_test | — | |
| search | — | |
| webhook_test | — | |
| webhook_rotate_secret | — |
구성
FIRSTREPLY_API_TOKEN
| 이름 | 설명 | 유형 |
|---|---|---|
| FIRSTREPLY_API_TOKEN | — |
자동 검사
2026년 11월 14일에 실행됨전체 보고서 →아직 인증되지 않았습니다. 서버는 80점 이상의 점수, 심각한 결함 없음, 그리고 검사에 충분한 데이터를 갖추어야 합니다. 검사 방식 · 점수를 높이기 위해 수정할 항목
- 소스 저장소 연결 및 접근 가능firstreply/firstreply-mcp is public and reachablegithub.com/firstreply/firstreply-mcp ↗통과
- 패키지가 이 저장소를 소스로 명시검사되지 않음
- 빌드 출처(Sigstore 증명)검사되지 않음
- 오픈 소스 라이선스 (OSI)MITspdx.org/licenses/MIT.html ↗통과
- 최근 1년 내 커밋 또는 릴리스Last commit or release 2026-11-13github.com/firstreply/firstreply-mcp ↗통과
- OpenSSF Scorecard검사되지 않음
- 패키지 이름이 인기 패키지와 유사하지 않음검사되지 않음
- 패키지 및 해당 종속성에 중요한 보안 권고 없음검사되지 않음
- 모델에 대한 숨겨진 지침 없음84 tool descriptions and the README read; no override phrases, credential paths or hidden characters통과
- 파괴적인 도구에 라벨 표시됨No tool named like delete, drop or exec통과
- 원격 엔드포인트가 MCP 핸드셰이크에 응답검사되지 않음
README
GitHub에서 보기FirstReply MCP Server
MCP (Model Context Protocol) server that exposes FirstReply customer support operations as tools for AI assistants like Claude. It lets an assistant browse and answer customer conversations, look up contacts, search and maintain the knowledge base, draft and translate replies, draft and schedule social media posts, manage classifications, templates, prompts, webhooks and saved filters, pull support and publishing statistics and manage organization API keys, all scoped and permission-checked by the FirstReply REST API.
The server speaks MCP protocol 2026-07-28 and the earlier 2025-* revisions
over stdio and HTTP, built on the v2 MCP TypeScript SDK.
Tools
Tools are named resource_action. Every organization-scoped tool takes an
organizationId (see organization_list). Tools that send something to a
customer or delete data are annotated as destructive.
Organization, members & API keys
| Tool | Description |
|---|---|
organization_list |
List accessible organizations |
organization_get |
Get an organization with its settings and AI prompts |
organization_update |
Update name, language, auto-close and the custom AI prompts |
organization_usage |
Plan, trial state and channel / member counts against the limits |
member_list |
List organization members |
member_get |
Get one member |
member_create |
Add a member by email with a permission level |
member_update |
Change a member's permission level |
member_delete |
Remove a member (destructive) |
api_key_list |
List the organization's named API keys (metadata only) |
api_key_create |
Create a named API key; plaintext returned once |
api_key_delete |
Delete (revoke) an API key (destructive) |
Channels
| Tool | Description |
|---|---|
channel_list |
List the channels (email, website chat, WhatsApp, Facebook Page, Instagram, LinkedIn, Threads, X, TikTok, YouTube, Google Business Profile, Bluesky, Mastodon, Telegram, Google Play, App Store) and whether Publishing is on |
channel_get |
Get one channel |
channel_statistics |
Statistics per channel |
channel_refresh |
Fetch new messages from a channel now |
channel_test |
Test the connection of a channel to its platform |
channel_create |
Create a channel from settings or credentials: email, website chat, Bluesky, Telegram, App Store, Google Play |
channel_connect |
Start connecting (or reconnecting) an account that signs in on the platform; returns the login link |
channel_update |
Rename, pause, turn Publishing and comment handling on or off, change settings or credentials |
channel_playstore_service_account |
The organization's Google service account to invite in the Play Console |
channel_tiktok_creator_info |
What a TikTok channel may post right now (privacy levels, interactions, video length) |
Facebook Pages, Instagram, LinkedIn, WhatsApp, Threads, X, TikTok, YouTube,
Google Business Profile and Mastodon are connected by signing in on the
platform. channel_connect returns the login link; the user opens it in a
browser where they are signed in to FirstReply (as the organization's owner,
which an API key acts as) and finishes there. The link is valid for 10
minutes. There is no tool to delete a channel.
Conversations & messages
| Tool | Description |
|---|---|
conversation_list |
List / filter / search conversations (status, channel, member, contact, classification, language, spam, priority, date ranges, search operators) |
conversation_get |
Get one conversation |
conversation_thread |
Get a conversation with all of its messages |
conversation_messages |
List the messages of a conversation |
conversation_reply |
Send a reply to the customer, or store an internal note or a draft, with attachments (destructive) |
conversation_close |
Close a conversation |
conversation_read |
Mark a conversation as read |
conversation_spam |
Mark a conversation as spam or not spam |
conversation_update |
Assign, reprioritize, reclassify, rename, change language, contact or spam flag |
conversation_delete |
Delete a conversation (destructive) |
conversation_stats |
Conversation statistics for a date range |
conversation_stats_by_member |
Statistics per member for a date range |
conversation_metrics |
Response and resolution metrics for a date range |
conversation_totals |
Current open / unread totals |
message_get |
Get one message |
message_update |
Edit a draft or internal note |
message_send |
Send a draft (destructive) |
message_delete |
Delete a message (destructive) |
attachment_upload |
Upload a file from a public https address; returns the attachment for conversation_reply |
The search argument of conversation_list, search and the saved filters
understands the FirstReply search syntax: words are AND-ed and prefix matched,
"quoted phrases", -word, and the operators from:, subject:, is:
(open, closed, unread, read, assigned, unassigned, ai), has:
(attachment, draft), before: and after: (YYYY-MM-DD).
attachment_upload takes images (JPEG, PNG, GIF, WebP), PDF, plain text, CSV,
Word and Excel files of up to 50 MB. Like post_media_upload it only fetches
public https addresses, and the file is streamed to the API, not kept.
Contacts
| Tool | Description |
|---|---|
contact_list |
List / search contacts |
contact_get |
Get one contact with custom fields |
contact_create |
Create a contact |
contact_update |
Update a contact |
contact_delete |
Delete a contact (destructive) |
contact_field_list |
List the custom contact fields |
Social posts
| Tool | Description |
|---|---|
post_list |
List / filter posts (status, channel, period, text); order: asc for upcoming posts |
post_get |
Get a post with its channels, publish state and latest metrics |
post_statistics |
How many posts are drafts, waiting for approval, scheduled, published and failed, and when the next one goes out |
post_metrics |
Metric snapshots of every channel of a published post |
post_comments |
The comment threads on a post, as conversations |
post_write |
Write, shorten or rewrite a post text with AI, for a platform and a character limit; saves nothing |
post_media_upload |
Upload an image or video from a public https address; returns the media id for a post |
post_create |
Save a post as a draft, with media and per-channel text and settings |
post_schedule |
Schedule a new post or an existing draft for a time on the given channels |
post_reschedule |
Move a post to another time; text, channels and media stay |
post_analytics |
Totals, daily series, top posts and channels for a period |
Posts target channels with Publishing on (publishingEnabled in channel_list),
given as channelIds or as targets with a text of their own and the
platform's settings (YouTube title and made-for-kids choice, TikTok privacy
level, Instagram post type, X thread parts, ...).
There is no tool to publish right away, approve, retry or delete a post: a
public post cannot be taken back, so the assistant drafts or schedules and a
person can still change it. Scheduled times have to be at least 10 minutes
ahead. When the organization requires approval, a member's scheduled post
waits for a manager (status PENDING_APPROVAL); such a post is not
rescheduled with manager rights (an API key acts as the owner), since saving
it would approve it. Comments are only read: hiding, deleting or liking a
comment and answering it privately act publicly on the platform and stay in
FirstReply.
Classifications
| Tool | Description |
|---|---|
classification_list |
List classifications with their automation settings |
classification_get |
Get one classification |
classification_create |
Create a classification |
classification_update |
Update a classification (unchanged settings are kept) |
classification_delete |
Delete a classification, optionally moving its conversations (destructive) |
classification_impact |
Preview what deleting a classification affects |
classification_statistics |
Conversation counts per classification |
Knowledge base
| Tool | Description |
|---|---|
knowledge_search |
Search or browse knowledge entries |
knowledge_get |
Get one knowledge entry |
knowledge_create |
Add a question / answer entry |
knowledge_update |
Update a knowledge entry |
knowledge_delete |
Delete a knowledge entry (destructive) |
knowledge_source_list |
List synced knowledge sources with their sync state |
knowledge_source_get |
Get one knowledge source |
knowledge_source_create |
Add a website or helpdesk (Freshdesk) source |
knowledge_source_update |
Rename a source, change its settings or its sync |
knowledge_source_delete |
Delete a knowledge source (destructive) |
knowledge_source_sync |
Start a sync now |
knowledge_source_status |
Sync status of a source |
Knowledge source configurations hold credentials and are never returned.
knowledge_source_update puts the settings it is given on top of the stored
ones. GitHub, Notion, GitBook, ClickUp and monday.com sources are connected
by signing in and are added in FirstReply; their settings can be changed here.
AI & search
| Tool | Description |
|---|---|
ai_draft_reply |
Generate an AI reply draft for a conversation without sending it |
ai_prompt |
Run a free-form prompt with the organization's persona and knowledge |
ai_translate |
Translate a text, e.g. a reply into the customer's language |
ai_test |
Simulate an incoming message: classification, spam verdict and reply |
search |
Global search across conversations, contacts, knowledge and messages |
Templates, prompts, webhooks & filters
| Tool | Description |
|---|---|
template_list / template_get / template_create / template_update / template_delete |
Reply templates and their language variants |
prompt_list / prompt_get / prompt_create / prompt_update / prompt_delete |
Saved AI prompts |
webhook_list / webhook_get / webhook_create / webhook_update / webhook_delete |
Webhooks and their events (including post.create, post.update, post.delete) |
webhook_test |
Send a test event to a webhook |
webhook_rotate_secret |
Generate a new signing secret (returned once) |
filter_list / filter_get / filter_create / filter_update / filter_delete |
Saved conversation filters |
Not covered, by design: authentication and profile endpoints, channel creation and OAuth connections, knowledge source creation, billing, attachments and CSV import / export, publishing posts right away, approving posts, media uploads, comment moderation and private replies to comments. Those stay in the FirstReply web app.
Widgets
Hosts that support MCP Apps (Claude, ChatGPT) show some results as a small view next to the answer:
| Widget | Tools | What it shows |
|---|---|---|
ConversationList |
conversation_list |
Contact, subject, last message, status and classification per conversation |
ReplyDraft |
ai_draft_reply |
The draft in a text field, with Send reply, Save as draft and Copy |
PostCard |
post_get, post_create, post_schedule, post_reschedule |
The post, its time and the status per channel |
PostAnalytics |
post_analytics |
Totals, views per day and numbers per channel |
ResultCard |
conversation_reply, conversation_close, channel_connect, channel_create, channel_update |
A confirmation, or the sign-in link of a channel |
Send reply in ReplyDraft calls conversation_reply with the text on screen;
a host that does not let widgets call tools only offers Copy. Widgets are in
English and German, following the host's language. Other hosts ignore them and
get the same JSON text as before.
Requirements
- Node.js >= 20
- A FirstReply account, or an organization API key
Authentication
The hosted server accepts two kinds of bearer token:
- Sign-in (OAuth 2.1): hosts such as Claude and ChatGPT only need the
address
https://mcp.firstreply.ai/. They register themselves, send the user to FirstReply to allow the connection, and act with that user's permissions in all of their organizations. - Organization API key: as described below; the only option for the local (stdio) server.
With an API key, the server authenticates against the FirstReply REST API with an
organization API key (fr_...), created in FirstReply under
Organization → Development → API Keys. Organizations support multiple named
keys with optional expiry, so it is best to create a dedicated key for this
MCP server. The key is sent as Authorization: Bearer.
API key requests run with the permissions of the organization owner: treat the key as a secret and rotate it by creating a new key and deleting the old one.
A key only reaches its own organization: organization_list returns just
that organization, and requests for any other organization are refused with
403. To work across several organizations, configure one server per key.
Usage (stdio, e.g. Claude Desktop)
{
"mcpServers": {
"firstreply": {
"command": "npx",
"args": ["-y", "@firstreply/mcp"],
"env": {
"FIRSTREPLY_API_TOKEN": "fr_..."
}
}
}
}
Claude Code
claude mcp add firstreply --env FIRSTREPLY_API_TOKEN=fr_... -- npx -y @firstreply/mcp
Usage (hosted)
The server runs at https://mcp.firstreply.ai/ (streamable HTTP). Send the
organization API key as bearer token:
claude mcp add --transport http firstreply https://mcp.firstreply.ai/ \
--header "Authorization: Bearer fr_..."
Usage (HTTP)
npm run build && npm run start:http # listens on :8080
Stateless: every request gets its own server instance, 2026-07-28 requests
are answered directly and 2025-era clients over a stateless streamable-HTTP
transport. Every request must carry Authorization: Bearer with an API key or access token. A
/health endpoint is provided for probes.
Without a token the answer is 401 with a WWW-Authenticate header naming
/.well-known/oauth-protected-resource, where the sign-in of an MCP host
starts; MCP_SERVER_URL is the address the server names itself with there.
A browser that opens the endpoint (GET / with Accept: text/html) gets the
landing page from public/.
Environment variables
| Variable | Description |
|---|---|
FIRSTREPLY_API_TOKEN |
Organization API key (stdio mode) |
FIRSTREPLY_API_URL |
API base URL (default https://api.firstreply.ai) |
MCP_SERVER_URL |
Public address of the HTTP server, its OAuth resource identifier (default https://mcp.firstreply.ai) |
PORT |
HTTP port (HTTP mode, default 8080) |
MCP_ENDPOINT_PATH |
HTTP endpoint path (default /) |
Development
npm install
npm run typecheck
npm test # builds and runs node:test suites
npm run build # compiles TypeScript to dist/
Project structure
src/
├── index.ts # stdio entry point
├── http-server.ts # HTTP entry point (Express + createMcpHandler)
├── server.ts # MCP server factory (McpServer + registerTool)
├── tools.ts # loads the tool modules, exposes the registry
├── tools/registry.ts # add() builder, schema helpers, dispatch
├── tools/<resource>.ts # one module per resource (conversations, contacts, ...)
├── media.ts # fetches a public file and streams it to a signed upload URL
└── client.ts # minimal FirstReply REST client
test/
├── tools.test.ts # tool definition checks and handler tests against a fake client
└── protocol.test.ts # stdio and HTTP end to end, both protocol eras, against an API stub
Adding a tool: call add(name, description, zodShape, annotations, handler)
in the matching src/tools/<resource>.ts. The zod shape is validated by the
SDK and published to clients as JSON Schema; every argument needs a
description (the tests check).
FirstReply MCP 질문
FirstReply MCP는 어떤 도구를 제공하나요?
84개 도구를 제공합니다. 예: organization_list, organization_get, organization_update, organization_usage, member_list.
FirstReply로 AI 어시스턴트가 무엇을 할 수 있나요?
어시스턴트는 고객 대화를 탐색하고 답변하며, 연락처 조회, 지식 베이스 검색 및 유지 관리, 답변 초안 작성 및 번역, 소셜 미디어 게시물 관리를 수행할 수 있습니다.
Facebook이나 Instagram 같은 소셜 미디어 채널은 어떻게 연결하나요?
channel_connect 도구가 반환하는 로그인 링크를 통해 해당 플랫폼에 로그인하여 채널을 연결할 수 있습니다.
AI 어시스턴트가 소셜 미디어 게시물을 즉시 발행할 수 있나요?
아니요, 어시스턴트는 게시물을 초안으로 작성하거나 예약만 할 수 있습니다. 즉시 발행하는 도구는 없으므로 사람이 직접 수정하거나 승인해야 합니다.
첨부 파일로 어떤 파일 형식을 업로드할 수 있나요?
이미지(JPEG, PNG, GIF, WebP), PDF, 일반 텍스트, CSV, Word, Excel 파일을 최대 50 MB까지 업채할 수 있습니다.