AgentPhone

io.github.AgentPhone-AI由 GitHub 帳號 AgentPhone-AI 發布v0.8.0更新於 Oct 29, 2026

Give AI agents real phone numbers, messages, and voice calls via MCP.

已驗證Streamable HTTP可網頁執行溝通與協作商業與電商

概覽

AI 產生的概覽

AgentPhone 讓 AI 助理擁有真實電話號碼,可收發簡訊/iMessage、撥打 AI 語音通話,並管理代理、聯絡人與 Webhook。

可以做什麼
  • 管理代理與號碼:建立、更新或刪除代理,查看可用語音,購買號碼並綁定或解除綁定
  • 收發訊息:傳送簡訊或 iMessage,查看訊息與對話清單,設定對話中繼資料
  • 撥打與檢視通話:發起 Webhook 驅動或內建 AI 對話的通話,列出通話並取得逐字稿
  • 管理聯絡人:列出、建立、更新與刪除已儲存的聯絡人
  • 設定 Webhook:取得、設定、刪除、測試 Webhook 並檢視投遞紀錄
  • 檢視帳戶狀態:代理、號碼與額度概覽,以及用量明細
適用情境
適合需要讓助理透過電話網路接觸真實對象的情境,例如傳送確認簡訊、打電話預約或做問卷、經營來電客服線路,而不只是在軟體內部作業。也適合已有或打算開通 AgentPhone 帳戶、想從 MCP 用戶端直接操作的團隊。
執行需求
可使用託管端點 mcp.agentphone.ai,或本機 npm 套件 agentphone-mcp(需 Node 20.19+ 或 22.12+)。需要 AgentPhone 帳戶與 API 金鑰:stdio 模式用 AGENTPHONE_API_KEY,HTTP 模式用 Authorization bearer 標頭;也支援 OAuth 登入。自架 HTTP 模式需指定連接埠,啟用 OAuth 還需預先註冊的用戶端 ID。
安裝前請注意
會產生費用:購買號碼、通話與訊息皆按次計費,buy_number 需帶 confirm=true 才會執行。delete_agent 與刪除聯絡人無法復原。透過這些工具撥出的通話會強制加上 AI 揭露語,無法關閉。API 金鑰可完全控制帳戶,reveal_secret 會把 Webhook 簽章密鑰暴露到模型上下文與日誌。開啟 AGENTPHONE_ALLOW_ANONYMOUS 後,任何能連上該端點的人都能以此帳戶操作。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 AgentPhone,將其新增到工作區。
  2. 連接 所需的 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.AgentPhone-AI%2Fagentphone/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。 客戶端會在首次連接時完成 OAuth 登入。

{
  "mcpServers": {
    "agentphone": {
      "type": "http",
      "url": "https://mcp.agentphone.ai/mcp"
    }
  }
}

README

AgentPhone MCP Server

Give AI agents real phone numbers, SMS, and voice calls via the Model Context Protocol.

AgentPhone lets your AI agent buy phone numbers, send/receive SMS, and place voice calls — all through natural language in Cursor, Claude Desktop, or any MCP-compatible client.

Agents are the core concept — each agent gets its own phone numbers, voice personality, system prompt, and webhook. Think of an agent as a virtual team member with its own phone line. You can create agents for different purposes (support, sales, scheduling) and configure how they sound and behave on calls.

Quick Start

1. Get your API key

Sign up at agentphone.ai and create an API key from Settings.

2. Connect via MCP

Option A: Remote server (recommended)

Point your MCP client at the hosted endpoint — no install needed:

json
{  "mcpServers": {    "agentphone": {      "type": "streamable-http",      "url": "https://mcp.agentphone.ai/mcp",      "headers": {        "Authorization": "Bearer your_api_key_here"      }    }  }}

Works with any MCP client that supports Streamable HTTP transport (Switchboard, remote agent platforms, etc.).

Option B: Local server (stdio)

Runs locally via npx — works with Cursor, Claude Desktop, Windsurf, and Claude Code:

Cursor: Settings > MCP or ~/.cursor/mcp.json Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)

json
{  "mcpServers": {    "agentphone": {      "command": "npx",      "args": ["-y", "agentphone-mcp"],      "env": {        "AGENTPHONE_API_KEY": "your_api_key_here"      }    }  }}

Option C: Self-hosted HTTP server

Run your own HTTP MCP endpoint:

bash
PORT=3000 npx agentphone-mcp --http

Then connect to http://localhost:3000/mcp and configure your MCP client to send Authorization: Bearer <your AgentPhone API key> with each request. A server-side AGENTPHONE_API_KEY alone does not authorize HTTP callers.

Warning: AGENTPHONE_ALLOW_ANONYMOUS=true opts into using the server's AGENTPHONE_API_KEY for requests with no Authorization header, only when OAuth is off. Anyone who can reach that endpoint can act as the account: only enable this behind your own authentication. Malformed headers are rejected, and a caller's supplied bearer is never replaced by the server key.

What Can It Do?

Once configured, just ask your AI agent things like:

  • "Buy me a phone number in the 415 area code"
  • "Create a support agent that greets callers and helps with billing"
  • "Call +14155551234 and have a conversation about scheduling a dentist appointment"
  • "Text +14155551234 saying 'Your appointment is confirmed for 3pm tomorrow'"
  • "Show me my recent calls and transcripts"
  • "List the available voices and switch my agent to a different one"
  • "Set up a webhook so I get notified when someone calls or texts my number"
  • "Show me this month's usage breakdown"

Transport & hosting

The server ships two transports from one entry point (node dist/index.js):

  • stdio (default): bare npm start / npx agentphone-mcp runs the standard MCP stdio transport for local clients, using AGENTPHONE_API_KEY.

  • HTTP: set PORT (or pass --http, optionally with --port <n>) to run the Streamable HTTP server, reachable at /mcp. --port alone does not switch transports — --http or PORT selects HTTP. The HTTP layer is built on the mcp-use framework, which owns Streamable HTTP, the SSE stream, session management, and the OAuth discovery endpoints.

  • Hosted: https://mcp.agentphone.ai/mcp

  • Self-hosted HTTP: PORT=3000 npm start → http://localhost:3000/mcp

Authentication

  1. OAuth (recommended for end users): the framework proxies an Authorization Code + PKCE flow to the AgentPhone authorization server, so the client opens a browser to sign in at agentphone.ai — no key to paste. Enable it by setting MCP_OAUTH_CLIENT_ID (a client pre-registered with the AgentPhone AS). MCP_OAUTH_CLIENT_SECRET is optional: set it to run the gateway as a confidential client, or leave it unset to run as a public client (the gateway must then be registered with token_endpoint_auth_method=none). Public mode advertises none to downstream clients, which strict OAuth clients require.
  2. API key (scripts / single-tenant, OAuth off): each request sends Authorization: Bearer <your API key>. The server-side AGENTPHONE_API_KEY is only used for callers that send nothing, and only when AGENTPHONE_ALLOW_ANONYMOUS=true. Without that flag an unauthenticated call is rejected, so an exposed port cannot act as your account.

With OAuth enabled, bearer tokens are verified through the backend’s /auth/me; the anonymous opt-in does not bypass that verification.

The caller’s credential is forwarded to the AgentPhone REST API for validation. The optional anonymous mode instead uses the configured server API key.

Environment

VarPurpose
PORTHTTP port (default 3000)
AGENTPHONE_API_KEYFallback API key when OAuth is off. Only used for callers that send no Authorization header when AGENTPHONE_ALLOW_ANONYMOUS=true
AGENTPHONE_ALLOW_ANONYMOUSDefault off; ignored when OAuth is enabled. Set to true to let requests with no Authorization header act with the server's AGENTPHONE_API_KEY. Anyone who can reach the port then controls the account: put the server behind your own auth first
MCP_OAUTH_CLIENT_IDEnable OAuth; a gateway client pre-registered with the AgentPhone AS
MCP_OAUTH_CLIENT_SECRETOptional. Set = confidential gateway; unset = public client (gateway registered with token_endpoint_auth_method=none, advertises none downstream)
AGENTPHONE_BASE_URLAPI base (default https://api.agentphone.ai)
AGENTPHONE_OAUTH_AUTHORIZEOverride authorize/consent URL (default https://agentphone.ai/oauth/authorize)
AGENTPHONE_MCP_PUBLIC_URLPublic base URL this server is reached at, advertised in the /.well-known/mcp.json install manifest (e.g. https://mcp.agentphone.ai). If unset, it's derived from the request.

Support matrix

DimensionSupported
Transportsstdio (default) and Streamable HTTP (set PORT / --http)
Tested runtimeNode ^20.19.0 || >=22.12.0 (CI runs 20, 22, 24)
ClientsAny MCP client — verified with Cursor, Claude Desktop, Claude Code, Windsurf (stdio); Streamable-HTTP clients and remote agent platforms (HTTP)
Auth modesstdio: AGENTPHONE_API_KEY. HTTP: per-request bearer, OAuth (Authorization Code + PKCE), or anonymous server-key fallback (AGENTPHONE_ALLOW_ANONYMOUS=true, OAuth off)
ChannelsSMS and iMessage (send/receive); voice calls (webhook-driven or built-in AI)
Number typesUS and Canada numbers

Highlights

  • Phone numbers — buy and manage numbers in any US/CA area code
  • SMS — send and receive text messages, view conversation threads
  • Voice calls — place outbound calls with built-in AI conversation (no webhook needed) or bring your own webhook
  • Inbound handling — set up webhooks to receive and respond to inbound calls and texts in real time
  • Agents — create agents with custom voices, system prompts, call transfer, and voicemail
  • Usage & billing — monitor number usage, message/call/webhook volume, and daily/monthly breakdowns

All Tools (32)

Account

ToolDescription
account_overviewGet a full snapshot of your account — agents, numbers, webhook, and usage
get_usageGet usage stats — number usage, billed SMS segments, and message/call/webhook volume. Use breakdown for daily or monthly time-series.

Phone Numbers

ToolDescription
list_numbersList all phone numbers in your account
buy_numberPurchase a new phone number with optional area_code and agent_id

SMS

ToolDescription
send_messageSend SMS, iMessage, or WhatsApp. Supports media, threaded replies (reply_to_message_id), iMessage effects (send_style), existing groups (to_number) or new groups (recipients), and WhatsApp interactive content (channel=whatsapp with buttons/list/cta/template)
check_capabilitiesCheck which channels a phone number can receive (iMessage / SMS / RCS) before sending
check_readinessCheck a number is ready before sending/calling: active + assigned + channel-capable are hard blockers; A2P/10DLC registration and recipient reachability are warnings. Returns ready, blockers, warnings, and next steps (credit/concurrency are enforced at send time, not pre-checkable)
get_messagesGet messages for a specific number. Page older history with cursor (from nextCursor); before/after are optional time filters.
list_conversationsList SMS conversations. Pass agent_id to filter by agent.
get_conversationGet a conversation with a bounded tail of recent messages
get_conversation_messagesPage through a conversation's full message history with cursor
update_conversationSet metadata on a conversation

Contacts

ToolDescription
list_contactsList saved contacts (address book). Filter with a search term.
manage_contactCreate, update, or delete a contact (set action)

Voice Calls

ToolDescription
list_callsList calls. Scope by agent_id or number_id, or filter the account-wide list by status/direction/search. Scope and filters can't be combined.
get_callGet call details and transcript
end_callEnd an in-progress call (safe to retry; ending a finished call is a no-op)
make_callPlace an outbound call (webhook-driven). Supports recording, variables, model tier, and call-screening controls
make_conversation_callPlace a call with built-in AI conversation — no webhook needed. Supports recording, variables, model tier, and call-screening controls

Agents

ToolDescription
list_agentsList all agents with their numbers and voice config
create_agentCreate an agent with voice, system prompt, call transfer, voicemail, and voice tuning (speed, interruption sensitivity, backchannel, language, and more)
update_agentUpdate an agent's configuration
delete_agentDelete an agent (numbers are kept but unassigned)
get_agentGet agent details including phone numbers and voice config
attach_numberAssign a phone number to an agent
detach_numberRemove a phone number from an agent
list_voicesList available voices for agents

Webhooks

All webhook tools accept an optional agent_id — pass it to manage an agent-specific webhook, omit it for the project-level default. Agent webhooks take priority over project-level.

ToolDescription
get_webhookGet webhook configuration
set_webhookSet a webhook URL for inbound messages and call events
delete_webhookRemove a webhook
test_webhookSend a test event to verify your webhook works
list_webhook_deliveriesView delivery history for debugging

get_webhook and set_webhook mask signing secrets by default, for both scopes. Retrieve the secret from the dashboard when possible. Passing reveal_secret: true includes it in tool output, exposing it to model context, transcripts and client logs. This prevents accidental disclosure; it is not an authorization boundary against a model that deliberately requests the secret.

Environment Variables

VariableRequiredDescription
AGENTPHONE_API_KEYstdio: yes; HTTP anonymous mode: yesIn HTTP mode, used only with AGENTPHONE_ALLOW_ANONYMOUS=true, OAuth off, and no caller Authorization header
AGENTPHONE_ALLOW_ANONYMOUSNoExplicit HTTP server-key fallback; default off, ignored when OAuth is enabled. See the self-hosting warning above
AGENTPHONE_BASE_URLNoOverride the API base URL (defaults to https://api.agentphone.ai)
PORTNoPort for HTTP mode (defaults to 3000; set with PORT)

Development

bash
git clone https://github.com/AgentPhone-AI/agentphone-mcp.gitcd agentphone-mcpnpm installnpm run dev     # Run with tsx (hot reload)npm run build   # Compile TypeScriptnpm start       # Run compiled JS — stdio by default; set PORT (or pass --http) for the HTTP servernpm test        # Build + run the full test suite (both transports, output-schema contracts)

Release & deployment checks

CommandWhat it verifies
npm run check:releaseVersion is identical across package.json, server.json, and the built handshake (run in prepublishOnly).
npm run smoke:packRuns npm pack, installs the resulting tarball in a clean dir, and runs the 204 detach regression against that packed tarball (the same bytes npm publish would upload; run in prepublishOnly).
npm run check:contractFetches the live OpenAPI and asserts the endpoints/fields the tools depend on still exist (message cursors + item fields, call filters, outbound-call request/response fields the client uses, the detach endpoint, and the from_ sender field). Network-dependent, so it's not part of npm test — run before a release or as a non-blocking CI job. Override with OPENAPI_URL.
npm run canaryRead-only post-deploy canary: connects to MCP_CANARY_URL, checks the handshake and tool surface, and (with MCP_CANARY_TOKEN) runs one read-only tool. No mutations; skips cleanly when MCP_CANARY_URL is unset.

How It Works

This MCP server connects your AI assistant to the AgentPhone API. Your assistant talks to the MCP server, which calls the AgentPhone API, which talks to the phone network.

Your AI Assistant  <-->  agentphone-mcp  <-->  AgentPhone API  <-->  Phone Network

Outbound: your assistant places calls and sends texts through AgentPhone's API.

Inbound: when someone calls or texts your number, AgentPhone sends a webhook event to your server — you can then respond programmatically or let your agent's built-in AI handle it.

License

MIT

來源:README.md,提交 cd4cab8

工具

28

account_overview

Account Overview

Get a complete snapshot of your AgentPhone account: agents, phone numbers, webhook status, and usage limits.

無需輸入參數。

list_numbers

List Phone Numbers

List all phone numbers in your account. Returns each number with its ID, status, country, and the agent it is assigned to (if any).

輸入參數limitoffset

buy_number

Buy Phone Number

Purchase a new phone number. This is a paid purchase that charges the account's balance, and requires confirm=true to actually go through. Returns the purchased number's details: its phone number, ID, country, and status.

輸入參數confirmcountryagent_idarea_code

send_message

Send Message

Send an SMS or iMessage from one of your agent's phone numbers, or react to an existing message. The tool has two modes, so which inputs are required depends on the mode: - Send: give a recipient (to_number) and a sender (agent_id, from_number, or number_id), plus body and/or media. The agent must have a phone number attached; number_id or from_number picks which one when it has several. - React: set reaction and react_to_message_id (iMessage only) to tapback or emoji-react to a message. Pass no send fields (recipient, sender, body/media, or send options); those are rejected. iMessage extras (ignored on SMS): reply_to_message_id threads a reply under an earlier message, and send_style adds an expressive screen/bubble effect. Returns the sent message (id, status, channel, from/to numbers), or the applied reaction.

輸入參數bodyagent_idreactionmedia_urlnumber_idto_numbermedia_urlssend_stylefrom_numberreact_to_message_idreply_to_message_id

get_messages

Get Messages

Get SMS messages for a specific phone number, identified by its number ID. Returns a list of individual messages — each with its timestamp, sender, recipient, and text — rather than grouped conversation threads.

輸入參數limitnumber_id必填

list_calls

List Calls

List recent calls. Scope by agent_id or number_id, or use status/direction/search to filter globally. When agent_id or number_id is passed, status/direction/search filters are not applied. Returns call summaries including each call's ID, direction, participants, and status.

輸入參數limitoffsetsearchstatusagent_iddirectionnumber_id

get_call

Get Call

Get details and transcript for a specific call, identified by its call ID. Returns the call's direction, participants, status, timestamps, and full transcript. Pass wait=true to block until an in-progress call finishes before returning.

輸入參數waitcall_id必填timeout

make_call

Make Call

Initiate an outbound, webhook-driven phone call where your backend handles the conversation logic. The agent must have a phone number attached and a webhook configured. This MCP connector prepends an automated-assistant disclosure to the greeting sent to the API; no tool argument disables that prefix. Calls made directly through the AgentPhone API or SDKs bypass this connector's disclosure logic. Returns the new call's ID, status, and the numbers it connects.

輸入參數voiceagent_id必填to_number必填from_number_idinitial_greeting

make_conversation_call

Make AI Conversation Call

Place a phone call where the AI has an autonomous conversation about a given topic — scheduling, surveys, follow-ups, etc. No webhook setup needed. The agent must have a phone number attached. This MCP connector prepends an automated-assistant disclosure to the greeting sent to the API and adds AI identity instructions around the topic. No tool argument disables these additions, but they do not guarantee the model's behavior. Calls made directly through the AgentPhone API or SDKs bypass this connector's disclosure logic. By default (wait=true) this waits for the call to finish — up to max_wait_seconds — and returns the call with its transcript. If that wait elapses first, it returns the call while it may still be in progress (check later with get_call). With wait=false it returns immediately with the call's ID and status, and you fetch the transcript later with get_call.

輸入參數waittopic必填voiceagent_id必填to_number必填from_number_idinitial_greetingmax_wait_seconds

list_agents

List Agents

List agents in your account (a single page, sized by limit). An agent is required before you can make calls — it owns phone numbers and handles voice/SMS. Returns each agent's ID, name, voice configuration, and attached phone numbers.

輸入參數limit

create_agent

Create Agent

Create a new agent. An agent owns phone numbers and handles calls/SMS. A newly created agent has no phone number until one is attached. Set voice_mode to 'hosted' with a system_prompt for autonomous AI voice calls, or 'webhook' (default) to forward call transcripts to your webhook URL. Returns the created agent, including its new ID and full configuration.

輸入參數name必填voicelanguagestt_modemodel_tiervoice_modedescriptionvoice_speedambient_soundbegin_messagesystem_promptdenoising_mode另有 6 個

update_agent

Update Agent

Update an agent's configuration — name, description, voice settings, instructions, greeting, call transfer, or voicemail. Only provided fields are updated; omitted fields keep their current value. Switching voice_mode to 'hosted' requires a system_prompt. Returns the agent's full configuration after the update.

輸入參數namevoiceagent_id必填languagestt_modemodel_tiervoice_modedescriptionvoice_speedambient_soundbegin_messagesystem_prompt另有 7 個

delete_agent

Delete Agent

Delete an agent permanently. Phone numbers attached to it are kept but unassigned. This cannot be undone. Returns the deleted agent's name and ID as confirmation.

輸入參數agent_id必填

get_agent

Get Agent

Get one agent's full configuration. Returns its voice settings, system prompt, model tier, transfer and voicemail setup, and the phone numbers attached to it.

輸入參數agent_id必填

attach_number

Attach Number to Agent

Attach a phone number to an agent so the agent handles calls/SMS on that number. Takes an agent ID and a phone number ID. Returns the attached number and the agent it now belongs to.

輸入參數agent_id必填number_id必填

detach_number

Detach Number from Agent

Detach a phone number from an agent. The number is kept in your account but becomes unassigned, and the agent stops handling calls and texts on it.

輸入參數agent_id必填number_id必填

list_voices

List Voices

List the voices available for agents. Returns each voice's ID (used in an agent's voice field), name, provider, gender, and accent.

無需輸入參數。

list_conversations

List Conversations

List SMS conversations. Optionally filter by agent_id to see conversations for a specific agent. Each conversation is a thread between your number and an external contact, with its ID, participant, message count, and last-message preview.

輸入參數limitoffsetagent_id

get_conversation

Get Conversation

Get one SMS conversation with its message history (up to message_limit most recent messages), identified by its conversation ID. Returns the contact, your phone number, the message count, any stored metadata, and the messages.

輸入參數message_limitconversation_id必填

update_conversation

Update Conversation

Set metadata on a conversation. Use this to store custom state, tags, or context that persists between messages. Pass null to clear metadata.

輸入參數metadata必填conversation_id必填

list_contacts

List Contacts

List saved contacts (your address book). Returns each contact's name, phone number, email, and ID. Optionally filter with a search term that matches name or phone number.

輸入參數limitoffsetsearch

manage_contact

Manage Contact

Create, update, or delete a saved contact. Set `action` to choose the operation. - create: requires phone_number and name - update: requires contact_id; only the fields you pass are changed - delete: requires contact_id (permanent) contact_id refers to a saved contact. Create and update return the saved contact (id, name, phone number, email, notes); delete returns a success flag.

輸入參數nameemailnotesaction必填contact_idphone_number

get_usage

Get Usage

Get account usage statistics. By default returns a summary with number usage plus message, call, and webhook volume. Use breakdown='daily' or 'monthly' for time-series data.

輸入參數daysmonthsbreakdown

get_webhook

Get Webhook

Get the webhook configuration — its URL, status, and signing secret. Pass agent_id to get an agent-specific webhook, or omit for the project-level default.

輸入參數agent_idreveal_secret

set_webhook

Set Webhook

Set a webhook URL to receive inbound messages and call events. Pass agent_id to set a webhook for a specific agent (overrides project default). Omit agent_id to set the project-level webhook for all agents. The signing secret is masked by default. Prefer retrieving it from the dashboard; reveal_secret=true exposes it to model context, transcripts and client logs.

輸入參數url必填timeoutagent_idcontext_limitreveal_secret

delete_webhook

Delete Webhook

Remove a webhook. Deleting an agent's webhook makes that agent fall back to the project-level webhook; deleting the project-level webhook stops events for agents using that default until you set one again (agents with their own webhook are unaffected). Pass agent_id to remove an agent's webhook, or omit it to remove the project-level webhook.

輸入參數agent_id

test_webhook

Test Webhook

Send a test event to verify a webhook is working. Returns the HTTP status code and response time. Pass agent_id to test that agent's webhook. Omit to test the project-level webhook.

輸入參數agent_id

list_webhook_deliveries

List Webhook Deliveries

View recent webhook delivery history. Shows which events were delivered, HTTP status codes, and timing. Pass agent_id to see deliveries for that agent's webhook. Omit for project-level.

輸入參數hourslimitagent_id

版本歷史

2
  1. v0.8.0最新Oct 21, 2026
  2. v0.6.0Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分