vielhuber/charly
If you are the rightful owner of charly and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
The Model Context Protocol (MCP) server is a specialized server designed to manage and facilitate communication between clients and machine learning models, ensuring efficient data exchange and model execution.
🦸🏽♂️ charly 🦸🏽♂️
a comprehensive model context protocol (mcp) server gateway that integrates multiple mcp servers with unified authentication through oauth2 and bearer tokens including a convenient web client.
requirements
- python (
>= 3.0) - php (
>=8.1) - mysql (
>=8.0)
usage
server
uvicorn app:app --host 0.0.0.0 --port 8000cloudflared tunnel run --url http://localhost:8000 TUNNEL
client
- open
https://your-client-tld.local
installation
setup
git clone git@github.com:vielhuber/charly.git .
server
cd servercp config.example.json config.jsonvi config.jsonpython -m venv venvsource venv/bin/activatepip install -r requirements.txt
client
cd clientcp .env.example .envvi .envphp ./_php/auth/index.php migratephp ./_php/auth/index.php create "david@vielhuber.de" "secret"- setup vhost (apache/nginx with ssl) that points to
/client/_public
worker
development
php ./_php/api/Worker.php
production
sudo apt-get install supervisor
sudo nano /etc/supervisor/conf.d/charly-worker.conf
[program:charly-worker]
command=php /var/www/charly/client/_php/api/Worker.php
directory=/var/www/charly/client
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/supervisor/charly-worker.log
sudo service supervisor start
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start charly-worker
tail -f /var/log/supervisor/charly-worker.log
update
git pull
cloudflare
auth0
- register/login on https://auth0.com
- user management > create user
browser
- applications > applications > create application
- type:
Single Page Web Applications - allowed callback urls:
https://*.ngrok-free.app/auth/auth/callback,https://your-custom-domain.com/auth/auth/callback - copy
Client IDandClient Secret(and fill in./server/config.json)
- type:
- test
- chatgpt.com / claude.ai: login via browser
- mcp inspector: start oauth flow or simply click "connect" (the browser redirects); remove "add custom headers"!
api
- applications > applications > create application
- type:
Machine to Machine Applications - api: auth0 management api > permissions: all
- copy
Domain,Client IDandClient Secret(and fill in./client/.env))
- type:
- test
- create token
xxx(e.g. via curl) to authorize with bearer token - mcp inspector: add custom headers:
Authorization: Bearer xxx - claude api / chatgpt api / openai playground:
"authorization_token": "xxx"
- create token
curl \
-s -X POST \
https://%YOUR_API_DOMAIN%/oauth/token \
-H "Content-Type: application/json" \
-d '
{
"client_id":"%YOUR_CLIENT_ID%",
"client_secret":"%YOUR_CLIENT_SECRET%",
"audience":"%YOUR_API_DOMAIN%/api/v2/",
"grant_type":"client_credentials"
}
' \
| jq -r '.access_token' | xclip -selection clipboard
recommended mcp servers
for example configurations of the following servers, see .
filesystem
mcp-filesystem-server
- url
- installation
go install github.com/mark3labs/mcp-filesystem-server@latest
word
Office-Word-MCP-Server
- url
- installation
git clone https://github.com/GongRzhe/Office-Word-MCP-Server.gitcd Office-Word-MCP-Serverpython setup_mcp.py (STDIO + Install from PyPI)
mailhelper
- url
- installation
composer require vielhuber/mailhelper
wahelper
- url
- installation
npm install @vielhuber/wahelpercomposer require vielhuber/wahelper
browser
playwright
- url
- installation
nvm use --ltsnpx install @playwright/mcp@latestnpx playwright install chrome
anki
anki-mcp-server
- url
- installation
- Anki Desktop > Extras > Erweiterungen > Erweiterungen herunterladen > 2055492159 > Neustart
/root/.nvm/versions/node/v22.20.0/bin/npm install -g anki-mcp-servernano /root/.nvm/versions/node/v22.20.0/lib/node_modules/anki-mcp-server/dist/index.js- replace
localhostwith192.168.0.2(2 times)
- replace
- cmd (admin):
netsh interface portproxy show v4tov4netsh interface portproxy delete v4tov4 listenaddress=192.168.0.2 listenport=12306netsh interface portproxy add v4tov4 listenaddress=192.168.0.2 listenport=12306 connectaddress=127.0.0.1 connectport=12306- if these rules are available but don't work
net stop iphlpsvc && net start iphlpsvc
- powershell (admin):
New-NetFirewallRule -DisplayName "chrome-mcp" -Direction Inbound -LocalPort 12306 -Action Allow -Protocol TCP
local chrome
mcp-chrome
- url
- installation
- add fresh chrome profile
- unzip downloaded extension in
~/ - open
chrome://extensions/> load unpacked extension > choose folder - windows (not wsl)
npm install -g mcp-chrome-bridgemcp-chrome-bridge register
- start server in chrome extension
- wsl
- cmd (admin):
netsh interface portproxy show v4tov4netsh interface portproxy delete v4tov4 listenaddress=192.168.0.2 listenport=12306netsh interface portproxy add v4tov4 listenaddress=192.168.0.2 listenport=12306 connectaddress=127.0.0.1 connectport=12306- if these rules are available but don't work
net stop iphlpsvc && net start iphlpsvc
- powershell (admin):
New-NetFirewallRule -DisplayName "chrome-mcp" -Direction Inbound -LocalPort 12306 -Action Allow -Protocol TCP
- test:
- windows:
http://127.0.0.1:12306/mcp - wsl:
http://192.168.0.2:12306/mcp(local ip fromipconfig)
- windows:
- cmd (admin):
custom php application
php-mcp
- url
- installation
composer require php-mcp/servercomposer require monolog/monolog
- boilerplate
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Monolog\Logger;
use Monolog\Level;
use Monolog\Handler\StreamHandler;
use PhpMcp\Server\Server;
use PhpMcp\Server\Transports\StdioServerTransport;
try {
$server = Server::make()
->withServerInfo('MCP Server', '1.0.0')
->withLogger((new Logger('mcp'))->pushHandler(new StreamHandler(__DIR__ . '/mcp-server.log', Level::Debug)))
->build();
$server->discover(basePath: __DIR__, scanDirs: ['.']);
$server->listen(new StdioServerTransport());
} catch (\Throwable $e) {
fwrite(STDERR, '[CRITICAL ERROR] ' . $e->getMessage() . "\n");
die();
}
custom js application
typescript-sdk
- url
- installation
nvm use --ltsnpm install @modelcontextprotocol/sdkprintf '{ "type": "module" }\n' > package.json