Atlas / MCP servers / acedatacloud / FishMCP

FishMCPCAUTION

mcp/acedatacloud/fishmcp

Fish Audio MCP server — text-to-speech with Fish Audio voice models. Powered by AceDataCloud.

Verdict
CAUTION
Grade
B
Trust score
86 /100
Exposed tools
4 4r · 0w · 0d
Transport
stdio · streamable-http
License
MIT
Stars
1
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

A Model Context Protocol (MCP) server for Fish Audio TTS (Text-to-Speech) via the AceDataCloud platform. Generate natural-sounding speech and explore the Fish voice model library.

Features

  • High-quality TTS: Generate speech from text via Fish Audio models
  • Voice library: Browse, search, and fetch metadata for Fish voice models
  • Asynchronous tasks: Submit generation tasks and poll for results
  • Batch task lookup: Query multiple task results in one call

One-shot voice cloning

Pass one public HTTPS reference audio URL plus its exact transcript. This conditions only the current TTS request and does not create a reusable voice model:

fish_generate_audio(
text="New speech in the referenced voice",
reference_audio_url="https://cdn.acedata.cloud/reference.mp3",
reference_text="The exact words spoken in the reference audio",
)

Use reference_id for saved or public voices, and the one-shot reference fields for a temporary voice. Do not combine them. Reference audio supports MP3/WAV and should be 10–270 seconds. Billing remains based on the target text's UTF-8 byte count.

Connect: hosted OAuth, API token, or local stdio

The hosted endpoint is https://fish.mcp.acedata.cloud/mcp. Choose one route for the MCP client:

Read from source at commit fd3f3a8feebcOBSERVED · 2026-10-07
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (pypi)
claude mcp add mcp-fish --env ACEDATACLOUD_API_TOKEN=${ACEDATACLOUD_API_TOKEN} -- uvx mcp-fish==2026.4.5.0
03

Exposed tools (4)

4 read · 0 write · 0 destructive.

ToolRiskDescription
fish_get_modelreadGet a Fish voice model by ID.
fish_get_taskreadQuery the status and result of a Fish audio generation task.
fish_get_tasks_batchreadQuery the status of multiple Fish tasks at once.
fish_get_usage_guidereadGet a comprehensive guide for using the Fish TTS tools.
04

Trust audit

CAUTIONgrade B · trust 86/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
declared (5 observation(s))
Shell
none-observed
Dependencies
pinned
Secrets in source
none-found

Findings (10)

MEDIUMInventory / provenance · inv.binary · CWE-1104
jetbrains/gradle/wrapper/gradle-wrapper.jar
gradle-wrapper.jar
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
core/oauth.py:279
logger.info(f"Revoked token: {token.token[:8]}...")
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
core/client.py:63
if not request_payload.get("callback_url") and "async" not in request_payload:
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
core/oauth.py:112
callback_url = f"{settings.server_url}/oauth/callback"
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
core/oauth.py:117
"redirect_uri": callback_url,
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
core/oauth.py:305
callback_url = f"{settings.server_url}/oauth/callback"
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
core/oauth.py:315
"redirect_uri": callback_url,
LOWInventory / provenance · inv.hidden_file · CWE-1104
.ruff.toml
.ruff.toml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
vscode/.vscodeignore
.vscodeignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
vscode/README.md:107
first use (redirect URL `http://127.0.0.1:33418` or `https://vscode.dev/redirect`).

Gates applied: no_behavioural_pass.

Audited 2026-10-07 · audit v0.4.1 · source sha fd3f3a8feebcfull audit observations/trust-audit/mcp-server/acedatacloud__fishmcp.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-07fd3f3a8feebcCAUTIONB86first audit
06

Questions

What is the FishMCP MCP server?

Fish Audio MCP server — text-to-speech with Fish Audio voice models. Powered by AceDataCloud.

What tools does FishMCP expose?

4 in total: 4 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is FishMCP safe to connect to an agent?

With care. The audit graded it B (86/100) and found 10 things worth knowing before you trust this server, listed below with the exact line each was found on.

What credentials does FishMCP need?

It reads ACEDATACLOUD_API_TOKEN, ACEDATACLOUD_AUTH_BASE_URL and ACEDATACLOUD_OAUTH_CLIENT_ID from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does FishMCP run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as mcp-fish at 0.2.0.

How current is this page?

The grade is for one exact copy of the source (fd3f3a8feebc), read on 2026-10-07. The repository is watched and re-audited when it changes.

Advertisement