cosense-mcp-worker
cosense-mcp-worker
Это stateless-сервер Remote MCP для управления одним проектом Cosense (ранее Scrapbox). Работает на Cloudflare Workers, для HTTP-маршрутизации используется Hono, для MCP — createMcpHandler() из Cloudflare Agents и MCP SDK v2. Реализация OAuth не встроена в Worker — она делегируется Cloudflare Access Managed OAuth.
Один Worker привязан к одному проекту Cosense и одному connect.sid. Из аргументов инструментов MCP нельзя изменить или указать другой проект или учётные данные.
Развёртывание одним кликом в Cloudflare
С помощью этой кнопки вы можете создать, собрать и развернуть Worker в своей собственной учётной записи Cloudflare. На экране настройки введите имя Worker, а также COSENSE_PROJECT_NAME, CF_ACCESS_TEAM_DOMAIN, CF_ACCESS_AUD и секрет COSENSE_SID.
Создание приложения Cloudflare Access, включение Managed OAuth и настройка политик Access выполняются самим пользователем уже после развёртывания.
Предоставляемые конечные точки
Конечная точка | Описание |
| Возвращает обзор сервиса. Не возвращает имя проекта или секреты. |
| Проверка работоспособности без аутентификации. |
| Конечная точка Streamable HTTP MCP, защищённая Cloudflare Access. |
Инструменты MCP
Инструмент | Входные данные | Описание |
|
| Получает текст страницы, прямые ссылки, связанные страницы 1-го и 2-го уровня, а также ссылки на внешние ресурсы и другие проекты. |
| нет | Получает до 100 страниц с описаниями и датами обновления, отсортированных по времени обновления. |
|
| Выполняет полнотекстовый поиск в пределах настроенного проекта Cosense. |
|
| Вставляет строки сразу после первой строки с точным совпадением. Если совпадений нет — добавляет в конец. |
Локальная настройка
Необходимы: Node.js 20 или новее, Corepack, учётная запись Cloudflare с доступом к Cloudflare Zero Trust и идентификатор сессии с правами на целевой проект Cosense.
git clone <リポジトリURL> cosense-mcp-worker
cd cosense-mcp-worker
corepack enable
pnpm installЗначения, не являющиеся секретами, задаются в wrangler.jsonc.
"vars": {
"COSENSE_PROJECT_NAME": "your-project",
"CF_ACCESS_TEAM_DOMAIN": "https://your-team.cloudflareaccess.com",
"CF_ACCESS_AUD": "YOUR_ACCESS_APPLICATION_AUDIENCE_TAG"
}Идентификатор сессии обязательно задавайте как Worker Secret. Не сохраняйте его в wrangler.jsonc, в исходном коде или в Git.
pnpm wrangler secret put COSENSE_SIDДля локальной разработки используйте файл .dev.vars, который не коммитится в репозиторий.
COSENSE_SID=your-connect.sid-valueПроверка и локальный запуск выполняются следующим образом.
pnpm lint
pnpm typecheck
pnpm test
pnpm wrangler dev --localНастройка Cloudflare Access Managed OAuth
Выполняйте следующие команды только после того, как будете готовы к развёртыванию.
pnpm deployЗатем в панели управления Cloudflare Zero Trust создайте приложение Access для домена Worker.
Создайте приложение MCP server для домена и пути
/mcpWorker.Настройте политику Access, разрешающую использование целевого проекта Cosense для нужных пользователей или групп.
Скопируйте тег Application Audience (AUD) и задайте его в
CF_ACCESS_AUD.Убедитесь, что Team Domain совпадает со значением
CF_ACCESS_TEAM_DOMAIN.В расширенных настройках приложения включите Managed OAuth.
Зарегистрируйте
https://<worker-host>/mcpв MCP-клиенте.
Authorization Code Flow, PKCE, вход в систему, обновление токенов, OAuth discovery и политики Access — всё это обеспечивает Cloudflare Access. Сам Worker не реализует OAuth-сервер.
Worker принимает Cf-Access-Jwt-Assertion и передаёт запросы к /mcp в обработчик MCP только после проверки подписи RS256, issuer и AUD с использованием JWKS-эндпоинта Team.
Информация об OAuth discovery при использовании Managed OAuth возвращается клиенту слоем Access. Внутри Worker не добавляются OAuth-эндпоинты и не создаётся собственный сервер авторизации.
Свойства безопасности
COSENSE_SIDобрабатывается как Secret binding и никогда не включается в JSON-ответы или логи.Запросы к
/mcpбез assertion Access или с недействительным assertion отклоняются с кодом401.Подпись Access JWT проверяется с помощью
https://<team-domain>/cdn-cgi/access/certs, а также проверяются issuer и AUD.Для
/mcpразрешены все источники (Origin). Приоритет отдаётся совместимости с Remote MCP-клиентами, а контроль доступа обеспечивается через OAuth-токены Cloudflare Access и проверку JWT в Worker.Входные данные инструментов MCP, отсутствующие в схеме, отклоняются, поэтому вызывающая сторона не может перезаписать проект или учётные данные.
Произвольные ошибки со стороны Cosense не передаются как есть — они ограничиваются ошибками на уровне отдельных операций.
Чтобы случайно не возвращать огромные ответы, вывод инструментов ограничен 100 000 символами.
Структура каталогов
src/
config.ts Worker bindingの検証
index.ts Honoルートとstateless MCP HTTP transport
middleware/access-auth.ts Access JWTの検証
mcp/server.ts MCP SDK v2 server factory
mcp/tools/ ツールごとのスキーマと登録処理
cosense/client.ts Cosense adapter
cosense/formatter.ts LLM向けページ整形
cosense/insert-lines.ts 純粋な挿入位置計算
test/ 外部Cosense APIを呼ばないユニットテストСправочные материалы
Идея основана на yosider/cosense-mcp-server. Данный проект не копирует код указанного репозитория, а представляет собой новую реализацию, предназначенную для Cloudflare Workers.
Related MCP Connectors
Hosted remote MCP server for YNAB on Cloudflare Workers with OAuth
OAuth-protected, read-only-by-default MCP server for provenance-labeled QuillCaddie project memory.
Remote streamable-HTTP MCP server running on a single Cloudflare Worker. Your assistant gets live Airbnb, Amazon, Booking.com, Google Flights, Maps and Reddit data, social search on X, Instagram and TikTok, the Meta Ad Library, and image/video generation without any keys. Connect your own accounts to let it send WhatsApp or Telegram messages, work an IMAP inbox, manage Meta Ads campaigns and publish to X and LinkedIn. OAuth 2.1 with PKCE; stored credentials are AES-256-GCM encrypted.
Hosted MCP server with managed OAuth for 15+ toolkits: Google Workspace, Fitbit, Oura, Kalshi, etc.