鵲 - Bridge Claude Desktop to Streamable HTTP MCP servers via mcp-proxy
Project description
cdcasasagi
鵲 - Bridge Claude Desktop to Streamable HTTP MCP servers via mcp-proxy
[!IMPORTANT] As of now, Claude Desktop officially supports custom connectors for remote MCP servers. I recommend considering that option first. While mcp-proxy is a great and easy-to-use tool, the scenarios where it is still necessary are likely limited now that official support exists. Additionally, custom connectors work not only with Claude Desktop but also with the web version of Claude, once configured.
[!NOTE] Windows users: see Windows notes for MSIX-specific config path behavior.
Install
uv tool install cdcasasagi
Usage
Commands at a glance:
- Mutating (preview by default,
--writeto apply):add,import,delete - Read-only:
list,validate-import,doctor - Recovery:
revert(restores from the.bakleft by the last--write) - Misc:
version
The add, import, and delete commands default to preview mode (no files are modified). Pass --write to apply changes.
For full option details, run cdcasasagi <command> --help.
add
Add a single MCP server entry:
cdcasasagi add https://developers.openai.com/mcp
This shows a unified diff of the proposed change. Pass --write to apply:
cdcasasagi add https://developers.openai.com/mcp --write
A server name is automatically derived from the URL hostname (e.g. developers for the URL above). Use --name to specify a custom name:
cdcasasagi add https://developers.openai.com/mcp --name openai-developer-docs --write
The written entry looks like this:
{
"mcpServers": {
"openai-developer-docs": {
"command": "/Users/you/.local/bin/mcp-proxy",
"args": [
"--transport",
"streamablehttp",
"https://developers.openai.com/mcp"
]
}
}
}
import
Add multiple entries at once from a JSONL file:
cdcasasagi import servers.jsonl
Each line is a JSON object with a required url key and optional name / transport keys:
{"url": "https://developers.openai.com/mcp", "name": "openai-developer-docs"}
{"url": "https://example.com/mcp"}
Stdin is also supported — pipe a file, or pass - and paste the JSONL interactively:
cat servers.jsonl | cdcasasagi import -
cdcasasagi import - --write
# Paste JSONL, then press Enter on a blank line to finish
# (Ctrl+D / Ctrl+Z also works)
delete
Remove an entry from the Claude Desktop config by URL:
cdcasasagi delete https://mcp.notion.com/mcp
This shows a unified diff of the proposed removal. Pass --write to apply:
cdcasasagi delete https://mcp.notion.com/mcp --write
Only entries added by cdcasasagi (whose command is mcp-proxy) are removed. Hand-added entries that happen to share a URL are left alone.
list
Show cdcasasagi-managed MCP servers in the config:
cdcasasagi list
Output is name : url, one entry per line, sorted by name. Only entries whose command is mcp-proxy (or mcp-proxy.exe on Windows) are shown.
validate-import
Validate a JSONL file's schema without importing. This command never writes any files.
cdcasasagi validate-import servers.jsonl
Paste JSONL from stdin instead of preparing a file:
cdcasasagi validate-import -
# Paste JSONL, then press Enter on a blank line to finish
# (Ctrl+D / Ctrl+Z also works)
Once the JSONL validates, feed the same content to import - --write to apply it.
doctor
Check that cdcasasagi can find what it needs to operate:
cdcasasagi doctor
This reports the resolved mcp-proxy binary, the active Claude Desktop config path, and whether the config directory is writable. The command exits with a non-zero status when any check fails, so it can be used in scripts.
On Windows, doctor also surfaces two MSIX-specific warnings:
- Claude Desktop MSIX path — the active config is not under the MSIX virtualized path, but a Claude MSIX install was detected. Claude Desktop on MSIX reads from the virtualized path (
%LOCALAPPDATA%\Packages\...\LocalCache\Roaming\Claude\...), so edits to the current path may have no effect. SetCLAUDE_DESKTOP_CONFIGto the candidate path shown in the warning. - Orphan APPDATA config — the active config is on the MSIX virtualized path, and a leftover
%APPDATA%\Claude\claude_desktop_config.jsonis also present. Claude Desktop reads only the active file, so anymcpServersentries in the orphan are ignored. Re-add them against the active config, then delete the orphan.
revert
Restore the config from the .bak backup created by the last --write:
cdcasasagi revert
version
cdcasasagi version
Windows notes
cdcasasagi locates Claude Desktop's config in this order:
CLAUDE_DESKTOP_CONFIGenvironment variable, if set.- The MSIX virtualized path (
%LOCALAPPDATA%\Packages\<Claude package>\LocalCache\Roaming\Claude\claude_desktop_config.json), if any MSIX install is detected. %APPDATA%\Claude\claude_desktop_config.jsonotherwise.
When multiple MSIX package directories are detected, cdcasasagi first tries to disambiguate by checking which candidates actually contain a claude_desktop_config.json — a common stale-install scenario (several package folders but only one real config) is handled automatically. cdcasasagi only refuses to proceed when more than one candidate file exists and the active one cannot be guessed. In that case, confirm the path via Settings > Developer > Edit Config in Claude Desktop, then set CLAUDE_DESKTOP_CONFIG to that path.
Run cdcasasagi doctor to check the resolved config path. On Windows it also surfaces two MSIX-specific situations:
- The active config is on
%APPDATA%while a Claude MSIX install is detected. Claude Desktop on MSIX reads the virtualized path, so%APPDATA%edits may not apply — pointCLAUDE_DESKTOP_CONFIGat the MSIX path shown. - An orphan
%APPDATA%\Claude\claude_desktop_config.jsonexists alongside the active MSIX config. Claude Desktop ignores the orphan, so anymcpServersentries there are dead. Re-add them against the active config and delete the orphan.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cdcasasagi-0.6.0.tar.gz.
File metadata
- Download URL: cdcasasagi-0.6.0.tar.gz
- Upload date:
- Size: 14.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
384f00b3d2b3acc41c07f02f877f717ab38d8e897ab610b4080c373bba7cf9e3
|
|
| MD5 |
4f4171518c867263f2c3fb3b9043f7d1
|
|
| BLAKE2b-256 |
fdc9f2d9540195cb271689865270d9186bb99079d8c4ea9d18d4285947e59b28
|
Provenance
The following attestation bundles were made for cdcasasagi-0.6.0.tar.gz:
Publisher:
publish.yml on ftnext/cdcasasagi
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cdcasasagi-0.6.0.tar.gz -
Subject digest:
384f00b3d2b3acc41c07f02f877f717ab38d8e897ab610b4080c373bba7cf9e3 - Sigstore transparency entry: 1429945022
- Sigstore integration time:
-
Permalink:
ftnext/cdcasasagi@613c170529f571998d3a38f2362884560b358007 -
Branch / Tag:
refs/tags/0.6.0 - Owner: https://github.com/ftnext
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@613c170529f571998d3a38f2362884560b358007 -
Trigger Event:
release
-
Statement type:
File details
Details for the file cdcasasagi-0.6.0-py3-none-any.whl.
File metadata
- Download URL: cdcasasagi-0.6.0-py3-none-any.whl
- Upload date:
- Size: 17.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
52b7a81cbd3d1c900b6c3fa78cdfef9fb2de13e78423966c4547c583882b833d
|
|
| MD5 |
83d58c5f90784d00781af9b72cef4040
|
|
| BLAKE2b-256 |
bbca08f42588a62887522d5d637e40500d3ebdc0af055c16661f7644b13dd1f8
|
Provenance
The following attestation bundles were made for cdcasasagi-0.6.0-py3-none-any.whl:
Publisher:
publish.yml on ftnext/cdcasasagi
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cdcasasagi-0.6.0-py3-none-any.whl -
Subject digest:
52b7a81cbd3d1c900b6c3fa78cdfef9fb2de13e78423966c4547c583882b833d - Sigstore transparency entry: 1429945024
- Sigstore integration time:
-
Permalink:
ftnext/cdcasasagi@613c170529f571998d3a38f2362884560b358007 -
Branch / Tag:
refs/tags/0.6.0 - Owner: https://github.com/ftnext
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@613c170529f571998d3a38f2362884560b358007 -
Trigger Event:
release
-
Statement type: