causly-server 0.0.0-stage → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +120 -0
- package/CHANGELOG.md +126 -0
- package/LICENSE +21 -0
- package/README.md +377 -3
- package/bin/causly.js +192 -0
- package/index.js +229 -0
- package/package.json +59 -6
- package/packs/calendar.js +141 -0
- package/packs/command.js +22 -0
- package/packs/database.js +95 -0
- package/packs/directory.js +63 -0
- package/packs/discord.js +63 -0
- package/packs/docker.js +202 -0
- package/packs/files.js +106 -0
- package/packs/git.js +211 -0
- package/packs/github.js +321 -0
- package/packs/gmail.js +98 -0
- package/packs/leads.js +46 -0
- package/packs/linear.js +104 -0
- package/packs/loader.js +247 -0
- package/packs/manifest.json +1152 -0
- package/packs/meetings.js +141 -0
- package/packs/notion.js +185 -0
- package/packs/pipeline.js +151 -0
- package/packs/project.js +70 -0
- package/packs/registry.js +149 -0
- package/packs/reminders.js +57 -0
- package/packs/research.js +34 -0
- package/packs/secrets.js +77 -0
- package/packs/sentry.js +97 -0
- package/packs/seo.js +70 -0
- package/packs/slack.js +95 -0
- package/packs/stripe.js +127 -0
- package/packs/supabase.js +73 -0
- package/packs/telegram.js +70 -0
- package/packs/terraform.js +247 -0
- package/packs/vercel.js +114 -0
- package/packs/workflow.js +84 -0
- package/prompts/cofounder.js +66 -0
- package/prompts/playbooks.js +75 -0
- package/tools/backupOps.js +87 -0
- package/tools/boundaryAttest.js +184 -0
- package/tools/calendarOps.js +563 -0
- package/tools/cliOps.js +233 -0
- package/tools/commandOps.js +198 -0
- package/tools/dbOps.js +117 -0
- package/tools/directoryOps.js +96 -0
- package/tools/discordOps.js +133 -0
- package/tools/dockerOps.js +259 -0
- package/tools/envFile.js +89 -0
- package/tools/envLoader.js +85 -0
- package/tools/fileOps.js +125 -0
- package/tools/gitOps.js +170 -0
- package/tools/githubOps.js +357 -0
- package/tools/gmailOps.js +221 -0
- package/tools/googleAuth.js +51 -0
- package/tools/googleLogin.js +230 -0
- package/tools/leadOps.js +447 -0
- package/tools/linearOps.js +304 -0
- package/tools/logger.js +47 -0
- package/tools/meetingOps.js +697 -0
- package/tools/notionOps.js +215 -0
- package/tools/paths.js +36 -0
- package/tools/pipelineOps.js +511 -0
- package/tools/projectOps.js +192 -0
- package/tools/reminderAlerts.js +48 -0
- package/tools/reminderOps.js +129 -0
- package/tools/scheduler.js +46 -0
- package/tools/secretsOps.js +133 -0
- package/tools/security.js +488 -0
- package/tools/sentryOps.js +130 -0
- package/tools/seoOps.js +561 -0
- package/tools/services.js +295 -0
- package/tools/setupOps.js +245 -0
- package/tools/slackOps.js +151 -0
- package/tools/statusOps.js +104 -0
- package/tools/store.js +111 -0
- package/tools/stripeOps.js +299 -0
- package/tools/supabaseOps.js +94 -0
- package/tools/telegramOps.js +153 -0
- package/tools/terminal.js +124 -0
- package/tools/terraformOps.js +171 -0
- package/tools/toolWrapper.js +60 -0
- package/tools/toolsetOps.js +123 -0
- package/tools/transcribeOps.js +221 -0
- package/tools/updateCheck.js +58 -0
- package/tools/vercelOps.js +198 -0
- package/tools/verifyBoundaryAttest.js +25 -0
- package/tools/webOps.js +474 -0
- package/tools/workflowOps.js +371 -0
- package/tools/workspace.js +85 -0
package/.env.example
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# All tokens below are optional — filesystem, git, shell, Terraform, and Docker
|
|
2
|
+
# tools work with no configuration at all. Add only the ones for services you
|
|
3
|
+
# plan to use. See README.md and the docs site for setup details per service.
|
|
4
|
+
|
|
5
|
+
# GitHub — repo/issue/PR tools
|
|
6
|
+
# Create at: https://github.com/settings/tokens?type=beta
|
|
7
|
+
# Needs: Contents (read/write), Issues (read/write), Pull requests (read/write),
|
|
8
|
+
# Administration (read/write, only if you want github_create_repo / github_delete_repo)
|
|
9
|
+
GITHUB_TOKEN=
|
|
10
|
+
|
|
11
|
+
# Vercel — project/deployment tools
|
|
12
|
+
# Create at: https://vercel.com/account/tokens
|
|
13
|
+
VERCEL_TOKEN=
|
|
14
|
+
|
|
15
|
+
# Supabase — project/SQL tools
|
|
16
|
+
# Create at: https://supabase.com/dashboard/account/tokens
|
|
17
|
+
SUPABASE_ACCESS_TOKEN=
|
|
18
|
+
|
|
19
|
+
# Slack — channel/message tools
|
|
20
|
+
# Create a Slack app at: https://api.slack.com/apps -> OAuth & Permissions
|
|
21
|
+
# Bot token scopes needed: channels:read, channels:history, groups:read, groups:history,
|
|
22
|
+
# chat:write, channels:manage, groups:write (for private channel creation), users:read
|
|
23
|
+
# (search:read requires a user token, not bot)
|
|
24
|
+
SLACK_BOT_TOKEN=
|
|
25
|
+
|
|
26
|
+
# Gmail — email tools (OAuth2, not a simple API key)
|
|
27
|
+
# 1. console.cloud.google.com -> new/existing project -> enable "Gmail API"
|
|
28
|
+
# 2. Google Auth Platform -> Branding (app name, support email); Audience -> External, add yourself as a test user
|
|
29
|
+
# 3. Clients -> Create client -> Application type: Desktop app (not "Web application")
|
|
30
|
+
# 4. Put the client id and secret below (or run: causly-server setup), then run:
|
|
31
|
+
# causly-server login google
|
|
32
|
+
# It signs you in with the browser and saves the refresh token for you.
|
|
33
|
+
# 5. In Testing status the token expires after 7 days: Audience -> Publish app avoids that.
|
|
34
|
+
GMAIL_CLIENT_ID=
|
|
35
|
+
GMAIL_CLIENT_SECRET=
|
|
36
|
+
GMAIL_REFRESH_TOKEN=
|
|
37
|
+
|
|
38
|
+
# Google Calendar — event/free-busy tools (same OAuth client as Gmail works)
|
|
39
|
+
# Enable "Google Calendar API" in the same Google Cloud project, then run
|
|
40
|
+
# `causly-server login google`; it saves the refresh token. Client id/secret fall back to GMAIL_CLIENT_*.
|
|
41
|
+
# CALENDAR_CLIENT_ID=
|
|
42
|
+
# CALENDAR_CLIENT_SECRET=
|
|
43
|
+
CALENDAR_REFRESH_TOKEN=
|
|
44
|
+
# Optional IANA timezone for "today"/"tomorrow" and working hours (default: machine zone)
|
|
45
|
+
# CAUSLY_TIMEZONE=Asia/Kolkata
|
|
46
|
+
|
|
47
|
+
# Telegram — alerts and bot messages. No OAuth, just a bot token.
|
|
48
|
+
# 1. Message @BotFather -> /newbot -> copy the token
|
|
49
|
+
# 2. Send any message to your new bot, then call telegram_get_updates to see your chat id
|
|
50
|
+
TELEGRAM_BOT_TOKEN=
|
|
51
|
+
# Chat that telegram_notify writes to (your own chat id)
|
|
52
|
+
TELEGRAM_CHAT_ID=
|
|
53
|
+
|
|
54
|
+
# Linear — issue tools
|
|
55
|
+
# Create at: Linear > Settings > Account > Security & access > Personal API keys
|
|
56
|
+
LINEAR_API_KEY=
|
|
57
|
+
|
|
58
|
+
# Stripe — customers, invoices, payment links, refunds. START WITH TEST MODE.
|
|
59
|
+
# Create at: https://dashboard.stripe.com/test/apikeys (toggle "Test mode" on).
|
|
60
|
+
# A restricted key (rk_test_...) works too; give it only the permissions you need.
|
|
61
|
+
# Live keys (sk_live_/rk_live_) are refused unless STRIPE_ALLOW_LIVE=true.
|
|
62
|
+
STRIPE_API_KEY=
|
|
63
|
+
# STRIPE_ALLOW_LIVE=true
|
|
64
|
+
# Currency used when a tool call does not give one (default usd)
|
|
65
|
+
# STRIPE_DEFAULT_CURRENCY=inr
|
|
66
|
+
|
|
67
|
+
# Discord — read and post in your servers. Bot token only.
|
|
68
|
+
# 1. discord.com/developers/applications -> New Application -> Bot -> Reset Token
|
|
69
|
+
# 2. Bot page: turn on "Message Content Intent" (needed to read other people's text)
|
|
70
|
+
# 3. OAuth2 > URL Generator: scope "bot", permissions View Channels + Read Message History +
|
|
71
|
+
# Send Messages; open the URL to invite the bot to your server
|
|
72
|
+
DISCORD_BOT_TOKEN=
|
|
73
|
+
|
|
74
|
+
# Groq - meeting transcription (Whisper). Free tier at https://console.groq.com/keys
|
|
75
|
+
# Audio is uploaded to Groq only when you confirm a meeting_transcribe call.
|
|
76
|
+
GROQ_API_KEY=
|
|
77
|
+
# GROQ_WHISPER_MODEL=whisper-large-v3-turbo
|
|
78
|
+
# Files above this size need ffmpeg on PATH to be compressed first (default 25)
|
|
79
|
+
# GROQ_MAX_FILE_MB=25
|
|
80
|
+
|
|
81
|
+
# Notion — page/database/block tools
|
|
82
|
+
# Create at: https://www.notion.so/my-integrations
|
|
83
|
+
# Also required: open each page/database in Notion you want accessible, click
|
|
84
|
+
# "..." -> Connections -> add your integration. The API only sees pages/databases
|
|
85
|
+
# explicitly shared with it, even with a valid token.
|
|
86
|
+
NOTION_API_KEY=
|
|
87
|
+
|
|
88
|
+
# Terraform — no token needed here. Just install the Terraform CLI and make
|
|
89
|
+
# sure `terraform` is on your PATH. These tools shell out to the CLI directly.
|
|
90
|
+
|
|
91
|
+
# Docker — no token needed here. Tries `docker` directly first (macOS/Linux/
|
|
92
|
+
# Docker Desktop), falls back to `wsl docker` on Windows if Docker only exists
|
|
93
|
+
# inside WSL.
|
|
94
|
+
|
|
95
|
+
# Postgres / MySQL — no persistent env var. Pass a connection string directly
|
|
96
|
+
# on each call, e.g. postgres://user:pass@host:5432/dbname or
|
|
97
|
+
# mysql://user:pass@host:3306/dbname
|
|
98
|
+
|
|
99
|
+
# Secrets manager — local encrypted secret storage, no external service.
|
|
100
|
+
# Generate a key with:
|
|
101
|
+
# node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
|
|
102
|
+
SECRETS_MASTER_KEY=
|
|
103
|
+
# Only needed temporarily while rotating the master key (see docs) — remove
|
|
104
|
+
# once rotation is complete.
|
|
105
|
+
# SECRETS_MASTER_KEY_NEW=
|
|
106
|
+
|
|
107
|
+
# Sentry — error monitoring/issue tools
|
|
108
|
+
# Create at: https://sentry.io/settings/account/api/auth-tokens/
|
|
109
|
+
# Needs at least project:read + event:read; add event:write for
|
|
110
|
+
# sentry_resolve_issue / sentry_ignore_issue / sentry_add_comment
|
|
111
|
+
SENTRY_AUTH_TOKEN=
|
|
112
|
+
|
|
113
|
+
# BoundaryAttest server receipt POC — optional and disabled by default.
|
|
114
|
+
# The private key must be an operator-controlled Ed25519 PKCS #8 PEM file
|
|
115
|
+
# outside the MCP client. No key or receipt directory is needed when disabled.
|
|
116
|
+
BOUNDARYATTEST_ENABLED=false
|
|
117
|
+
# BOUNDARYATTEST_PRIVATE_KEY=/absolute/path/to/ed25519-private.pem
|
|
118
|
+
# BOUNDARYATTEST_RECEIPT_DIR=/absolute/path/to/receipts
|
|
119
|
+
# Optional subset of the three POC tools (cannot expand beyond this set):
|
|
120
|
+
# BOUNDARYATTEST_TOOLS=ship_change,verify_ci_fix,deploy_project
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented here.
|
|
4
|
+
|
|
5
|
+
## [1.5.1]
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
- New README for the npm package: install-first quick start, architecture diagram, demo GIF, tool pack tables, configuration, Google setup, security and privacy, troubleshooting and FAQ.
|
|
9
|
+
- `.env.example`: the Google setup comments now describe the `causly-server login google` flow.
|
|
10
|
+
|
|
11
|
+
## [1.5.0]
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
- **npm package and CLI**: `npm install -g causly-server`, then `causly-server init | setup | keys | doctor [--test] | status | toolsets | backup | restore | login google | remove`. `init` adds the server to Claude Desktop, Cursor and Windsurf.
|
|
15
|
+
- **Lazy tool packs**: files, directory, command and project load first; other packs load on demand. `search_tools`, `load_toolset` and `use_tool` let an agent find and call any tool without restarting the editor. `toolsets` controls which packs load at startup.
|
|
16
|
+
- **Co-founder packs**: research (2 tools), leads (3), SEO and content (4, including Search Console), pipeline (9, local SQLite), calendar (8), Telegram (5), Linear (7), meetings (9: Groq Whisper transcription, action items, deal and calendar links, call prep) and reminders (3, delivered to Telegram).
|
|
17
|
+
- **Safety and local data**: opt-in workspace limit (`init --workspace`), approval gate for risky actions, and a local SQLite store under `~/.causly` with `backup` and `restore`.
|
|
18
|
+
- **Google sign-in**: `causly-server login google` for Gmail, Calendar and Search Console.
|
|
19
|
+
- Opt-in BoundaryAttest Interop Profile v0.2 `server_attested` receipts for the `ship_change`, `verify_ci_fix`, and `deploy_project` workflow boundary, with RFC 8785/JCS redacted evidence hashes, independent expected-key verification, and focused tests. BoundaryAttest v0.1 remains legacy-only.
|
|
20
|
+
- **Notion — new category, 15 tools**: search, page/database CRUD, block append/read/update/delete, comments, users. All live-tested against a real shared Notion page.
|
|
21
|
+
- **Terraform — new category, 20 tools**: full lifecycle (init/validate/fmt/plan/apply/destroy/show/output/workspace), state management (state_list/show/mv/rm/pull/import/taint/untaint), graph/providers, and a CI/CD hook (`terraform_plan_comment` — posts a plan summary as a GitHub PR comment). 17/20 live-tested.
|
|
22
|
+
- **Docker — new category, 18 tools**: ps/images/build/run/stop/start/restart/rm/rmi/logs/inspect/exec/stats/push/pull/compose up-down. Cross-platform — tries `docker` directly first, falls back to `wsl docker` on Windows-only-WSL setups, with automatic Windows-path-to-WSL-path translation for build context, volumes, and compose working directory. 17/18 live-tested.
|
|
23
|
+
- **Generic Postgres/MySQL — new category, 8 tools**: query/list_tables/describe_table/test_connection for each engine, connection-string based. All 8 live-tested against throwaway Docker containers.
|
|
24
|
+
- **Local encrypted secrets manager — new category, 6 tools**: set/get/list/delete/rotate_key/generate_key. AES-256-GCM, local file store, no external service required. All 6 live-tested including a full key-rotation cycle.
|
|
25
|
+
- **Sentry monitoring — new category, 8 tools**: list_projects/list_issues/search_issues/get_issue/resolve_issue/ignore_issue/get_project_stats/add_comment. 5/8 live-tested.
|
|
26
|
+
|
|
27
|
+
Total: 230+ tools, up from 106.
|
|
28
|
+
|
|
29
|
+
### Changed
|
|
30
|
+
- The central wrapper now owns each operation ID and supplies it to the existing audit logger so an optional receipt and normal audit event share one correlation identity. Approval and security semantics are unchanged.
|
|
31
|
+
- **License: PolyForm Noncommercial 1.0.0 → MIT.** Added `"license": "MIT"` to `package.json`.
|
|
32
|
+
- Removed the temporary `register/` staging folder now that all tool registrations live directly in `index.js`.
|
|
33
|
+
- Removed the legacy `setup.js` helper (`causly-server init` replaces it) and moved the docs site and landing code out of this repo.
|
|
34
|
+
- Updated `CONTRIBUTING.md` and `ROADMAP.md` to reflect the new tool categories and the current Azure/GCP/AWS-deferred stance.
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
- Docker: Windows-style paths (`D:\...`) passed to `docker_build`/`docker_run`/`docker_compose_*` broke when the WSL fallback path was used — added automatic path translation to WSL form (`/mnt/d/...`).
|
|
38
|
+
- Secrets manager: default secrets-store path was anchored to `process.cwd()` (the server's launch directory) instead of the repo root, causing an `EPERM` in some launch configurations — now anchored via `import.meta.url`.
|
|
39
|
+
- Sentry: bare `/issues/{id}/` lookups 404'd on the default API host for EU-region (data-residency) organizations even though org/project-scoped endpoints worked fine there — added automatic regional-host fallback on 404.
|
|
40
|
+
|
|
41
|
+
## [1.4.0]
|
|
42
|
+
|
|
43
|
+
### Added
|
|
44
|
+
- **Gmail — new category, 8 tools** (OAuth2 refresh-token based): `gmail_get_profile`, `gmail_search`, `gmail_list_messages`, `gmail_get_message`, `gmail_get_thread`, `gmail_send`, `gmail_reply`, `gmail_forward`. Send/reply/forward classified `HIGH` risk (require `confirm: true`); reads classified `READ`.
|
|
45
|
+
- Setup wizard and `.env.example` now document the Gmail OAuth2 flow (Google Cloud Console + OAuth Playground) and prompt for `GMAIL_CLIENT_ID` / `GMAIL_CLIENT_SECRET` / `GMAIL_REFRESH_TOKEN`
|
|
46
|
+
|
|
47
|
+
### Fixed
|
|
48
|
+
- `slack_list_channels` silently returning only the first page in large workspaces — now paginates via `response_metadata.next_cursor` up to the requested `limit`
|
|
49
|
+
- `.env.example` Slack scope list was missing `groups:write`, required for `slack_create_channel` with `is_private: true`
|
|
50
|
+
|
|
51
|
+
### Known limitation
|
|
52
|
+
- Gmail tools require OAuth2 credentials (not a simple API key) — one-time setup via Google Cloud Console. All 8 tools tested working live against a real Gmail account.
|
|
53
|
+
|
|
54
|
+
## [1.3.0]
|
|
55
|
+
|
|
56
|
+
### Added
|
|
57
|
+
- **Slack — new category, 8 tools** (Web API, bot-token based): `slack_get_user`, `slack_list_channels`, `slack_get_channel`, `slack_read_messages`, `slack_search_messages`, `slack_send_message`, `slack_reply_thread`, `slack_create_channel`. Send/reply/create-channel classified `HIGH` risk (require `confirm: true`); reads classified `READ`.
|
|
58
|
+
- Setup wizard and `.env.example` now prompt for `SLACK_BOT_TOKEN`
|
|
59
|
+
|
|
60
|
+
### Fixed
|
|
61
|
+
- `slack_get_user` failing with `missing_scope` — Slack app was missing the `users:read` bot scope; documented required scopes in `.env.example`
|
|
62
|
+
|
|
63
|
+
### Known limitation
|
|
64
|
+
- `slack_search_messages` requires a Slack **user token**, not a bot token — bot tokens return `not_allowed_token_type`. All other Slack tools tested working with a bot token against a live workspace.
|
|
65
|
+
|
|
66
|
+
## [1.2.0]
|
|
67
|
+
|
|
68
|
+
### Added
|
|
69
|
+
- **Git — 11 new tools**, completing the primitive layer (20/20): `git_create_branch`, `git_checkout`, `git_merge`, `git_reset`, `git_stash`, `git_show`, `git_remote`, `git_tag`, `git_changed_files`, `git_diff_stat`, `git_check_clean`
|
|
70
|
+
- **GitHub — 18 new tools**, completing PR lifecycle + Actions/CI (27/27): repo/issue get+update, PR get/update/merge, PR files/diff/comments/reviews, branch get/list, workflow list/runs/jobs/logs/rerun
|
|
71
|
+
- **Vercel — 4 new tools**, completing the deployment-verification set (11/11): `vercel_get_deployment_logs`, `vercel_get_deployment_events`, `vercel_cancel_deployment`, `http_check`
|
|
72
|
+
- **Project Intelligence — new category, 7 tools**: `project_detect`, `project_info`, `project_health`, `run_tests`, `run_lint`, `run_typecheck`, `run_build` — auto-detects language/framework/package manager and resolves the right commands instead of guessing
|
|
73
|
+
- **Workflow tools — new category, 4 tools**: `ship_change` (branch → checks → commit → push → PR, one call), `fix_ci` (diagnose a failing CI run with real logs), `verify_ci_fix` (commit/push/poll until green), `deploy_project` (health → tests+build → deploy → poll → HTTP-verify)
|
|
74
|
+
- **Security layer**: permission-level classification (`READ`/`LOW`/`MEDIUM`/`HIGH`/`DESTRUCTIVE`) with an approval gate (`confirm: true`) for risky tools; secret redaction on every log line; graded command-risk classification (force-push, `DROP TABLE`, curl-pipe-bash, etc.); path protection against writing/deleting inside system directories
|
|
75
|
+
- **Structured audit logging** — `logs/activity.log` is now JSONL (one JSON object per line) with operation ID, risk level, redacted input, and duration per call
|
|
76
|
+
- **MCP Resources**: `causly://project/{path}/health`, `/info`, `/git` for direct context reads
|
|
77
|
+
- **MCP Prompts**: `ship-feature`, `fix-ci`, `deploy-project`, `review-changes`
|
|
78
|
+
- `CODE_OF_CONDUCT.md`, `BUILD_LOG.md`, `ROADMAP.md`
|
|
79
|
+
|
|
80
|
+
### Changed
|
|
81
|
+
- License: MIT → PolyForm Noncommercial 1.0.0
|
|
82
|
+
- README rewritten to reflect the full 78-tool / 8-category surface and the security model
|
|
83
|
+
|
|
84
|
+
### Fixed
|
|
85
|
+
- `npm run <script>` (and any command relying on Windows' extension-less resolution — `node`, `where`, etc.) failing with `'node' is not recognized`, specifically inside nested `cmd.exe` processes. Root cause: the raw `PATHEXT` env var Claude Desktop passes in had a leading semicolon, producing an empty extension entry that silently broke resolution one process-layer down even though `PATHEXT` looked correct when echoed at the top level. `buildEnv()` now splits/filters/rejoins `PATH` and `PATHEXT` instead of string-concatenating, and resolves the real casing of each key (`Path` vs `PATH`) instead of risking a duplicate.
|
|
86
|
+
- `ship_change` failing outright when its target branch already existed instead of checking it out
|
|
87
|
+
|
|
88
|
+
## [1.1.3]
|
|
89
|
+
|
|
90
|
+
### Fixed
|
|
91
|
+
- `vercel_create_deployment` failing with `gitSource missing required property repoId` — Vercel's API requires the numeric GitHub repo ID, not an "owner/repo" string. Now resolves the ID automatically via the GitHub API before calling Vercel.
|
|
92
|
+
|
|
93
|
+
## [1.1.2]
|
|
94
|
+
|
|
95
|
+
### Fixed
|
|
96
|
+
- `run_command` occasionally failed with `spawn powershell.exe ENOENT` on Windows because it relied on PATH lookup to find PowerShell, and Claude Desktop's spawned environment doesn't always have a reliable PATH. Now resolves PowerShell via its standard absolute System32 path first, with automatic fallback to a PATH-based lookup and finally `cmd.exe` if PowerShell truly cannot be found.
|
|
97
|
+
|
|
98
|
+
## [1.1.1]
|
|
99
|
+
|
|
100
|
+
### Fixed
|
|
101
|
+
- `run_command` was failing to find `node`, `npm`, and other executables on Windows — Claude Desktop launches the server with a stripped-down environment where `PATHEXT` arrives missing standard extensions (`.EXE`, `.CMD`, `.BAT`, etc.), so PowerShell couldn't resolve commands even though they existed and their folder was in `PATH`. Now restores a sane default `PATHEXT` when spawning commands on Windows.
|
|
102
|
+
|
|
103
|
+
## [1.1.0]
|
|
104
|
+
|
|
105
|
+
### Added
|
|
106
|
+
- GitHub tools: authenticated user, create/delete/list repos, create/list issues, create/list pull requests, add comment
|
|
107
|
+
- Vercel tools: authenticated user, list/get projects, list/get deployments, create deployment, delete project
|
|
108
|
+
- Supabase tools: list organizations, list/get projects, create/delete project, run raw SQL
|
|
109
|
+
- Interactive setup wizard (`npm run setup`) — configures `.env` tokens and Claude Desktop config automatically
|
|
110
|
+
- `.env.example` template
|
|
111
|
+
- CONTRIBUTING.md, issue/PR templates, CI workflow
|
|
112
|
+
|
|
113
|
+
### Fixed
|
|
114
|
+
- `move_file` / `copy_file` / `write_file` / `create_file` failing with `EPERM` when the destination directory was a drive root on Windows (e.g. `D:\`)
|
|
115
|
+
- Removed the `dotenv` dependency — its stdout banner was corrupting the MCP stdio JSON-RPC stream, causing "Unexpected token" errors. Replaced with a small dependency-free `.env` parser.
|
|
116
|
+
- `run_command` was running through `cmd.exe` on Windows by default, which can't handle multi-statement scripts or many PowerShell-style commands. Now runs through `powershell.exe` on Windows.
|
|
117
|
+
|
|
118
|
+
## [1.0.0]
|
|
119
|
+
|
|
120
|
+
### Added
|
|
121
|
+
- Initial release
|
|
122
|
+
- File tools: read, read multiple, create, write, edit, delete, move, copy, get info
|
|
123
|
+
- Directory tools: list, tree, create, delete, search
|
|
124
|
+
- Git tools: init, status, add, commit, push, pull, log, diff, branch
|
|
125
|
+
- Shell execution tool (`run_command`) with a blocklist of destructive command patterns
|
|
126
|
+
- Local activity logging (`logs/activity.log`)
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Kumar Nihal (Causly)
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,377 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
# Causly Server
|
|
2
|
+
|
|
3
|
+
**The open-source MCP server that turns any AI agent into your technical co-founder.**
|
|
4
|
+
|
|
5
|
+
<p>
|
|
6
|
+
<a href="https://www.npmjs.com/package/causly-server"><img src="https://img.shields.io/npm/v/causly-server.svg?color=FF9A1F" alt="npm version"></a>
|
|
7
|
+
<a href="./LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="MIT license"></a>
|
|
8
|
+
<a href="https://github.com/KNIHAL/causly-server/actions/workflows/ci.yml"><img src="https://github.com/KNIHAL/causly-server/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
9
|
+
<img src="https://img.shields.io/badge/node-%E2%89%A5%2020-339933.svg" alt="Node 20 or newer">
|
|
10
|
+
<a href="./CONTRIBUTING.md"><img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg" alt="PRs welcome"></a>
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
Most agents can write text. Causly Server gives them hands: they ship code, hunt for clients, track deals, take meeting notes, handle your calendar and remind you on Telegram, all from one conversation, all on your own machine.
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install -g causly-server
|
|
17
|
+
causly-server init
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
<p align="center">
|
|
21
|
+
<img src="https://raw.githubusercontent.com/KNIHAL/causly-server/master/docs/images/demo.gif" alt="Install, init and doctor in under ten seconds" width="85%">
|
|
22
|
+
</p>
|
|
23
|
+
|
|
24
|
+
## Contents
|
|
25
|
+
|
|
26
|
+
- [Why Causly Server](#why-causly-server)
|
|
27
|
+
- [Quick start](#quick-start)
|
|
28
|
+
- [What you can ask](#what-you-can-ask)
|
|
29
|
+
- [How it works](#how-it-works)
|
|
30
|
+
- [Tool packs](#tool-packs)
|
|
31
|
+
- [Workflow tools](#workflow-tools)
|
|
32
|
+
- [Configuration](#configuration)
|
|
33
|
+
- [Google setup](#google-setup-gmail-calendar-search-console)
|
|
34
|
+
- [Works with](#works-with)
|
|
35
|
+
- [Security and privacy](#security-and-privacy)
|
|
36
|
+
- [Command reference](#command-reference)
|
|
37
|
+
- [Troubleshooting](#troubleshooting)
|
|
38
|
+
- [FAQ](#faq)
|
|
39
|
+
- [Compatibility](#compatibility)
|
|
40
|
+
- [Contributing, roadmap, license](#contributing-roadmap-license)
|
|
41
|
+
|
|
42
|
+
## Why Causly Server
|
|
43
|
+
|
|
44
|
+
A founder's week is not only code. It is also finding clients, following up, remembering what was promised in a call, and shipping without breaking things. Causly Server puts all of that behind one MCP server.
|
|
45
|
+
|
|
46
|
+
- **One server for build, sell, operate and grow.** Git, GitHub, CI and deploys, but also leads, a sales pipeline, meeting notes, calendar, reminders and SEO.
|
|
47
|
+
- **Memory that survives the chat.** Your pipeline, meetings and reminders live in a local SQLite file, so the agent can pick up tomorrow where it stopped today.
|
|
48
|
+
- **Local-first.** Keys and data stay on your machine. There is no Causly cloud in the loop.
|
|
49
|
+
- **Safe by default.** Risky actions need explicit confirmation, file access can be limited to one folder, and secrets are redacted from logs.
|
|
50
|
+
- **Light on your agent's context.** Tools load in packs on demand instead of flooding the agent with hundreds of definitions.
|
|
51
|
+
- **One command setup.** `init` finds Claude Desktop, Cursor and Windsurf and wires them up.
|
|
52
|
+
|
|
53
|
+
## Quick start
|
|
54
|
+
|
|
55
|
+
Requires Node.js 20 or newer.
|
|
56
|
+
|
|
57
|
+
**1. Install**
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
npm install -g causly-server
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**2. Connect your editors**
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
causly-server init
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
`init` adds Causly Server to Claude Desktop, Cursor and Windsurf, whichever you have. It also prints the one-line command for Claude Code. Restart the editor afterwards.
|
|
70
|
+
|
|
71
|
+
**3. Check everything**
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
causly-server doctor
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**4. Add keys for the services you use (optional)**
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
causly-server setup
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Files, git, shell, Docker and Terraform work with no keys at all. Add keys only for the services you want. Each key is checked live as you enter it.
|
|
84
|
+
|
|
85
|
+
Useful `init` options:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
causly-server init --client cursor # pick editors instead of auto-detecting
|
|
89
|
+
causly-server init --workspace D:\my-project # limit file tools to one folder
|
|
90
|
+
causly-server init --toolsets research,pipeline,meetings # choose which packs load at startup
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## What you can ask
|
|
94
|
+
|
|
95
|
+
- "Find companies hiring React developers and add the best three to my pipeline."
|
|
96
|
+
- "Save notes from my call with Acme: they want a demo next week, follow up on Friday."
|
|
97
|
+
- "What is due this week? Include meeting action items and reminders."
|
|
98
|
+
- "Prep me for my next meeting." (needs Google Calendar)
|
|
99
|
+
- "Transcribe this recording and list the action items." (needs a Groq key)
|
|
100
|
+
- "Ship this change: run the checks, open a pull request, tell me when CI is green."
|
|
101
|
+
- "Audit this page for SEO and suggest keywords."
|
|
102
|
+
- "Find a free slot on Thursday and create the event."
|
|
103
|
+
|
|
104
|
+
## How it works
|
|
105
|
+
|
|
106
|
+
<p align="center">
|
|
107
|
+
<img src="https://raw.githubusercontent.com/KNIHAL/causly-server/master/docs/images/architecture.png" alt="Architecture: your AI agent talks MCP to Causly Server, which has a tool router, a safety layer, tool packs and a local store, and calls your services over their APIs." width="100%">
|
|
108
|
+
</p>
|
|
109
|
+
|
|
110
|
+
Your agent talks to Causly Server over MCP (stdio). Inside the server:
|
|
111
|
+
|
|
112
|
+
1. **Tool router.** `search_tools`, `load_toolset` and `use_tool` let the agent find a tool and call it by name. Packs load on demand, and `use_tool` works even in editors that do not refresh their tool list mid-chat, so you do not need to restart.
|
|
113
|
+
2. **Safety layer.** Permission levels, confirmation for risky actions, an optional workspace limit, secret redaction and an activity log.
|
|
114
|
+
3. **Tool packs.** About 230 tools grouped into packs (below).
|
|
115
|
+
4. **Local store.** SQLite for pipeline, meetings and reminders in `~/.causly`, encrypted secrets, and your API keys in `~/.causly/.env`.
|
|
116
|
+
5. **Your services.** GitHub, Vercel, Docker, Terraform, Postgres, Slack, Notion, Linear, Gmail, Google Calendar, Telegram and more, reached with your own keys.
|
|
117
|
+
|
|
118
|
+
## Tool packs
|
|
119
|
+
|
|
120
|
+
These packs load at startup by default:
|
|
121
|
+
|
|
122
|
+
| Pack | Tools | What it does |
|
|
123
|
+
| --- | --- | --- |
|
|
124
|
+
| files | 9 | Read, write, edit, copy, move and inspect files |
|
|
125
|
+
| directory | 5 | List, create and delete directories; search file names |
|
|
126
|
+
| command | 1 | Run shell commands with safety checks |
|
|
127
|
+
| project | 7 | Detect project type and health; run build, tests, lint and typecheck |
|
|
128
|
+
| research | 2 | Search the web and read pages as clean text |
|
|
129
|
+
| leads | 3 | Find companies hiring (Hacker News, remote job boards) and public company contact details |
|
|
130
|
+
| pipeline | 9 | Local sales pipeline: leads, deals, contacts, activity log, report, CSV export |
|
|
131
|
+
| meetings | 9 | Transcribe recordings, save summaries, track action items, link to deals and calendar, prep for calls |
|
|
132
|
+
| reminders | 3 | Follow-ups saved locally; ask what is due |
|
|
133
|
+
|
|
134
|
+
These load on demand, or you can add them to startup with `causly-server toolsets add <name>`:
|
|
135
|
+
|
|
136
|
+
| Pack | Tools | What it does |
|
|
137
|
+
| --- | --- | --- |
|
|
138
|
+
| calendar | 8 | Google Calendar: events, free/busy, find meeting slots, create, update, delete |
|
|
139
|
+
| gmail | 8 | Search, read, send, reply and forward |
|
|
140
|
+
| telegram | 5 | Alert yourself, read messages sent to your bot |
|
|
141
|
+
| seo | 4 | Keyword ideas, page audit, draft check, Search Console |
|
|
142
|
+
| git | 20 | Status, diff, commit, branch, merge, stash, tags, remotes |
|
|
143
|
+
| github | 27 | Repos, issues, pull requests, reviews, Actions |
|
|
144
|
+
| workflow | 4 | `ship_change`, `fix_ci`, `verify_ci_fix`, `deploy_project` |
|
|
145
|
+
| vercel | 11 | Projects, deployments, HTTP health checks |
|
|
146
|
+
| docker | 18 | Build, run, logs, images, exec, Compose |
|
|
147
|
+
| terraform | 20 | Init, plan, apply, state, workspaces, PR plan comments |
|
|
148
|
+
| database | 8 | Postgres and MySQL queries and schema inspection |
|
|
149
|
+
| supabase | 6 | Projects, organizations and SQL |
|
|
150
|
+
| slack | 8 | Channels, messages and threads |
|
|
151
|
+
| notion | 15 | Pages, databases, blocks and comments |
|
|
152
|
+
| linear | 7 | List, read, create, update and comment on issues |
|
|
153
|
+
| sentry | 8 | Projects and issues |
|
|
154
|
+
| secrets | 6 | Encrypted local secrets store |
|
|
155
|
+
|
|
156
|
+
Manage startup packs:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
causly-server toolsets # show what loads at startup
|
|
160
|
+
causly-server toolsets add github,gmail
|
|
161
|
+
causly-server toolsets remove seo
|
|
162
|
+
causly-server toolsets reset # back to the defaults
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Workflow tools
|
|
166
|
+
|
|
167
|
+
Single tools are building blocks. These combine them into verified outcomes:
|
|
168
|
+
|
|
169
|
+
- **`ship_change`**: inspects changes, creates a branch, runs project checks, commits, pushes and opens a pull request.
|
|
170
|
+
- **`fix_ci`**: finds a failing GitHub Actions run and fetches the real failure output.
|
|
171
|
+
- **`verify_ci_fix`**: commits and pushes the fix, polls the workflow and confirms CI is green.
|
|
172
|
+
- **`deploy_project`**: checks health, runs tests and build, deploys, polls, and HTTP-verifies the live URL.
|
|
173
|
+
|
|
174
|
+
```mermaid
|
|
175
|
+
flowchart TD
|
|
176
|
+
A["You describe a task"] --> B["Agent edits files"]
|
|
177
|
+
B --> C["ship_change runs checks"]
|
|
178
|
+
C --> D["Commit, push, open PR"]
|
|
179
|
+
D --> E{"CI passes?"}
|
|
180
|
+
E -- "No" --> F["fix_ci gets failure logs"]
|
|
181
|
+
F --> G["Agent fixes the code"]
|
|
182
|
+
G --> H["verify_ci_fix pushes and confirms CI"]
|
|
183
|
+
H --> E
|
|
184
|
+
E -- "Yes" --> I["deploy_project deploys"]
|
|
185
|
+
I --> J["HTTP verification"]
|
|
186
|
+
J --> K["Shipped"]
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Configuration
|
|
190
|
+
|
|
191
|
+
Settings live in `~/.causly/.env` (on Windows, `C:\Users\<you>\.causly\.env`). Manage them with the CLI instead of editing by hand:
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
causly-server setup # step by step, each key checked live
|
|
195
|
+
causly-server keys list # which keys are set (never the full value)
|
|
196
|
+
causly-server keys set NAME # hidden prompt
|
|
197
|
+
causly-server keys unset NAME
|
|
198
|
+
causly-server doctor --test # check every configured service live
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Changes are picked up without restarting your editor.
|
|
202
|
+
|
|
203
|
+
| Service | Variables | Notes |
|
|
204
|
+
| --- | --- | --- |
|
|
205
|
+
| GitHub | `GITHUB_TOKEN` | Fine-grained token: contents, issues, pull requests |
|
|
206
|
+
| Vercel | `VERCEL_TOKEN` | Project must be Git-linked for deploys |
|
|
207
|
+
| Supabase | `SUPABASE_ACCESS_TOKEN` | Management API |
|
|
208
|
+
| Slack | `SLACK_BOT_TOKEN` | `search:read` needs a user token |
|
|
209
|
+
| Notion | `NOTION_API_KEY` | Share each page or database with the integration |
|
|
210
|
+
| Linear | `LINEAR_API_KEY` | Personal API key |
|
|
211
|
+
| Sentry | `SENTRY_AUTH_TOKEN` | Add `event:write` to resolve or comment |
|
|
212
|
+
| Gmail | `GMAIL_CLIENT_ID`, `GMAIL_CLIENT_SECRET`, `GMAIL_REFRESH_TOKEN` | Run `causly-server login google` |
|
|
213
|
+
| Google Calendar | `CALENDAR_REFRESH_TOKEN` | Same Google client as Gmail |
|
|
214
|
+
| Telegram | `TELEGRAM_BOT_TOKEN`, `TELEGRAM_CHAT_ID` | Create a bot with @BotFather, message it, then find your chat id with `telegram_get_updates` |
|
|
215
|
+
| Groq (meeting transcription) | `GROQ_API_KEY` | Free tier available. Audio is uploaded to Groq only when you confirm a transcription |
|
|
216
|
+
| Secrets manager | `SECRETS_MASTER_KEY` | 32-byte hex key you generate and keep |
|
|
217
|
+
| Timezone (optional) | `CAUSLY_TIMEZONE` | IANA name, e.g. `Asia/Kolkata`; defaults to your machine's zone |
|
|
218
|
+
|
|
219
|
+
Docker and Terraform need no key, only the CLI on your `PATH`. Postgres and MySQL take a connection string on each call. Transcribing recordings over 25 MB needs `ffmpeg` on your `PATH`.
|
|
220
|
+
|
|
221
|
+
## Google setup (Gmail, Calendar, Search Console)
|
|
222
|
+
|
|
223
|
+
Google needs a one-time OAuth client that you own. It takes about five minutes.
|
|
224
|
+
|
|
225
|
+
1. Open [Google Cloud Console](https://console.cloud.google.com) and create or pick a project.
|
|
226
|
+
2. Enable the APIs you want: **Gmail API**, **Google Calendar API**, and optionally **Google Search Console API**.
|
|
227
|
+
3. Open **Google Auth Platform**. Under **Branding**, fill in the app name and your support email. Under **Audience**, choose **External** and add your own Google account as a test user.
|
|
228
|
+
4. Under **Clients**, choose **Create client** and pick **Desktop app**. A "Web application" client fails with `redirect_uri_mismatch`. Copy the client ID and secret.
|
|
229
|
+
5. Save them in Causly: run `causly-server setup`, or `causly-server keys set GMAIL_CLIENT_ID` and `causly-server keys set GMAIL_CLIENT_SECRET`.
|
|
230
|
+
6. Sign in once in your browser:
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
causly-server login google # Gmail and Calendar
|
|
234
|
+
causly-server login google all # also Search Console
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
**Avoid the 7-day expiry.** While your Google app is in *Testing*, Google expires the sign-in token every 7 days. Renew it any time with `causly-server login google`, or stop the expiry for good: in **Google Auth Platform → Audience**, click **Publish app** (In production). The Branding page from step 3 must be filled in first. For personal use you do not need Google verification; at sign-in you will see an "unverified app" warning, which is expected for your own client: choose **Advanced**, then continue.
|
|
238
|
+
|
|
239
|
+
## Works with
|
|
240
|
+
|
|
241
|
+
| Client | Setup |
|
|
242
|
+
| --- | --- |
|
|
243
|
+
| Claude Desktop | `causly-server init` |
|
|
244
|
+
| Cursor | `causly-server init` |
|
|
245
|
+
| Windsurf | `causly-server init` |
|
|
246
|
+
| Claude Code | `init` prints the command: `claude mcp add causly-server -- node <path>/index.js` |
|
|
247
|
+
| Any MCP client or agent framework | Spawn `causly-server` over stdio |
|
|
248
|
+
|
|
249
|
+
Tested with Claude Desktop, Cursor and Windsurf (the same `use_tool` call on a real repository in each), a plain JavaScript MCP client, and LangChain (JS) through `@langchain/mcp-adapters`.
|
|
250
|
+
|
|
251
|
+
A minimal custom agent in JavaScript:
|
|
252
|
+
|
|
253
|
+
```js
|
|
254
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
255
|
+
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
256
|
+
|
|
257
|
+
const client = new Client({ name: "my-agent", version: "1.0.0" });
|
|
258
|
+
// Find the install folder with: npm root -g
|
|
259
|
+
await client.connect(new StdioClientTransport({
|
|
260
|
+
command: "node",
|
|
261
|
+
args: ["<npm-root>/causly-server/index.js"],
|
|
262
|
+
}));
|
|
263
|
+
|
|
264
|
+
const { tools } = await client.listTools(); // search_tools, load_toolset, use_tool, ...
|
|
265
|
+
const result = await client.callTool({
|
|
266
|
+
name: "use_tool",
|
|
267
|
+
arguments: { tool: "git_status", arguments: { repo_path: "." } },
|
|
268
|
+
});
|
|
269
|
+
console.log(result.content[0].text);
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
## Security and privacy
|
|
273
|
+
|
|
274
|
+
Causly can touch your files, repositories and infrastructure, so the controls live in the server itself. See [SECURITY.md](./SECURITY.md) to report a vulnerability.
|
|
275
|
+
|
|
276
|
+
- **Permission levels.** Every tool is `READ`, `LOW`, `MEDIUM`, `HIGH` or `DESTRUCTIVE`. `HIGH` and `DESTRUCTIVE` actions (deploys, merges, shell commands, deletes, raw SQL, Terraform apply and destroy, Docker removal) need an explicit `confirm: true`.
|
|
277
|
+
- **Workspace limit.** `causly-server init --workspace <folder>` restricts file and command tools to one folder.
|
|
278
|
+
- **Command risk checks.** Drive wipes, formatting and shutdown commands are blocked. Force-pushes, `DROP TABLE`, `curl | bash` and `sudo` are flagged.
|
|
279
|
+
- **Path protection.** Writes and deletes inside protected system directories are blocked.
|
|
280
|
+
- **Secret redaction.** Tokens, passwords and API keys are redacted before anything is written to logs.
|
|
281
|
+
- **Local encrypted secrets.** The built-in secrets manager uses AES-256-GCM with a key you control. No external vault needed.
|
|
282
|
+
- **Activity log.** Every call is recorded in `logs/activity.log` as structured JSONL (timestamp, operation ID, risk level, status, redacted input, duration).
|
|
283
|
+
|
|
284
|
+
**Privacy.** Causly Server has no Causly cloud and no Causly account. Your pipeline, meetings and reminders are stored in a local SQLite file, and your keys stay in `~/.causly/.env`. Data leaves your machine only when you use a service you configured, for example GitHub, Gmail, Telegram, or Groq for transcription, and only to that service.
|
|
285
|
+
|
|
286
|
+
Optional BoundaryAttest receipts for `ship_change`, `verify_ci_fix` and `deploy_project` are described in [the docs](https://agenv.causly.in/docs/server/tools/boundaryattest).
|
|
287
|
+
|
|
288
|
+
## Command reference
|
|
289
|
+
|
|
290
|
+
```text
|
|
291
|
+
causly-server Start the MCP server (your editor runs this)
|
|
292
|
+
causly-server init Set up Claude Desktop, Cursor and Windsurf
|
|
293
|
+
--client claude|cursor|windsurf|all
|
|
294
|
+
--workspace <folder>
|
|
295
|
+
--toolsets <list>
|
|
296
|
+
--no-setup
|
|
297
|
+
causly-server status One screen: editors, keys, pipeline, reminders, backup, updates
|
|
298
|
+
causly-server doctor [--test] Check your setup; --test also checks every key live
|
|
299
|
+
causly-server setup [service] Add API keys step by step
|
|
300
|
+
causly-server keys list | set NAME | unset NAME | open
|
|
301
|
+
causly-server login google [gmail,calendar,gsc|all]
|
|
302
|
+
causly-server toolsets [add|remove|reset]
|
|
303
|
+
causly-server backup [file] Save a copy of your pipeline, meetings and reminders
|
|
304
|
+
causly-server restore <file> [--yes] Put a backup back (current data is kept as a copy)
|
|
305
|
+
causly-server remove [--client <name>] Remove it from your editors
|
|
306
|
+
causly-server --version
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
## Troubleshooting
|
|
310
|
+
|
|
311
|
+
Start with `causly-server doctor`. It tells you what is missing.
|
|
312
|
+
|
|
313
|
+
| Problem | Fix |
|
|
314
|
+
| --- | --- |
|
|
315
|
+
| `causly-server` is not recognized after install | Open a new terminal so your `PATH` refreshes. Check that your npm global folder (`npm config get prefix`) is on `PATH`. |
|
|
316
|
+
| Editor does not show the tools after `init` | Quit the editor completely (including the system tray) and open it again. |
|
|
317
|
+
| The agent cannot see a tool that is not loaded | Ask it to call the tool with `use_tool`, or run `causly-server toolsets add <pack>`. |
|
|
318
|
+
| Gmail or Calendar stopped working | Your Google token expired (7 days in Testing mode). Run `causly-server login google`. |
|
|
319
|
+
| `redirect_uri_mismatch` during Google sign-in | Your OAuth client is a "Web application". Create a **Desktop app** client instead. |
|
|
320
|
+
| A reminder never reached Telegram | Set both `TELEGRAM_BOT_TOKEN` and `TELEGRAM_CHAT_ID`, then run `causly-server doctor --test`. |
|
|
321
|
+
| Transcription fails on a large file | Install `ffmpeg` and make sure it is on your `PATH`. Files above 25 MB are compressed first. |
|
|
322
|
+
| `restore` cannot replace the data file | Quit Claude Desktop, Cursor and any app using Causly Server, then run it again. |
|
|
323
|
+
| A file or command is refused | A workspace limit may be on. Check `causly-server doctor`, or re-run `init` with the folder you want. |
|
|
324
|
+
|
|
325
|
+
## FAQ
|
|
326
|
+
|
|
327
|
+
**Is it free?** Yes. It is MIT licensed, including for commercial use. The services you connect have their own pricing.
|
|
328
|
+
|
|
329
|
+
**Does my data go to Causly?** No. There is no Causly cloud in the loop. See [Security and privacy](#security-and-privacy).
|
|
330
|
+
|
|
331
|
+
**Do I need every key?** No. Add keys only for the services you use.
|
|
332
|
+
|
|
333
|
+
**Which agents work with it?** Any MCP client. It is tested with Claude Desktop, Cursor, Windsurf, a plain JavaScript client and LangChain (JS).
|
|
334
|
+
|
|
335
|
+
**Why is my agent not calling a tool?** It may be in a pack that is not loaded. Tell the agent to use `use_tool`, or add the pack with `causly-server toolsets add <pack>`.
|
|
336
|
+
|
|
337
|
+
**How do I update?** `npm update -g causly-server`. `status` and `doctor` tell you when a new version is out.
|
|
338
|
+
|
|
339
|
+
**How do I back up my data?** `causly-server backup` saves your pipeline, meetings and reminders to a file. `causly-server restore <file>` puts it back.
|
|
340
|
+
|
|
341
|
+
**How do I remove it?** `causly-server remove` takes it out of your editors. Then `npm uninstall -g causly-server`.
|
|
342
|
+
|
|
343
|
+
**Is there a hosted version?** Causly Hosted is in development. [Join the waitlist](https://tally.so/r/NpZkpW).
|
|
344
|
+
|
|
345
|
+
## Compatibility
|
|
346
|
+
|
|
347
|
+
| | Status |
|
|
348
|
+
| --- | --- |
|
|
349
|
+
| Node.js | 20 or newer |
|
|
350
|
+
| Windows | Tested |
|
|
351
|
+
| macOS and Linux | Expected to work; not yet tested on real machines. Reports welcome. |
|
|
352
|
+
| Editors | Claude Desktop, Cursor, Windsurf (tested); Claude Code (command printed by `init`) |
|
|
353
|
+
|
|
354
|
+
## Known limitations
|
|
355
|
+
|
|
356
|
+
- `vercel_create_deployment` and `deploy_project` need the Vercel project to be Git-linked already.
|
|
357
|
+
- `supabase_run_sql` uses the Supabase Management API; some personal access tokens get a `403` for SQL.
|
|
358
|
+
- `slack_search_messages` needs a Slack user token with the `search:read` scope.
|
|
359
|
+
- `docker_push` needs registry authentication already configured on the host.
|
|
360
|
+
- Sentry `resolve_issue`, `ignore_issue` and `add_comment` need a token with the `event:write` scope.
|
|
361
|
+
|
|
362
|
+
## Contributing, roadmap, license
|
|
363
|
+
|
|
364
|
+
- Docs: [agenv.causly.in/docs/server](https://agenv.causly.in/docs/server/intro)
|
|
365
|
+
- [CONTRIBUTING.md](./CONTRIBUTING.md) explains how to add a tool pack and the manual testing checklist. Please read the [Code of Conduct](./CODE_OF_CONDUCT.md) too.
|
|
366
|
+
- [ROADMAP.md](./ROADMAP.md) has what is planned next. [CHANGELOG.md](./CHANGELOG.md) has release history.
|
|
367
|
+
- License: [MIT](./LICENSE).
|
|
368
|
+
|
|
369
|
+
## Want something custom built on this?
|
|
370
|
+
|
|
371
|
+
Need a custom MCP server, a specific integration, or a related service for your product or team? Reach out: **nihal@causly.in**
|
|
372
|
+
|
|
373
|
+
## Causly Hosted
|
|
374
|
+
|
|
375
|
+
Do not want to run Causly Server yourself? Causly Hosted is a managed version, currently in development.
|
|
376
|
+
|
|
377
|
+
[Join the Causly Hosted waitlist](https://tally.so/r/NpZkpW)
|