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.
Files changed (91) hide show
  1. package/.env.example +120 -0
  2. package/CHANGELOG.md +126 -0
  3. package/LICENSE +21 -0
  4. package/README.md +377 -3
  5. package/bin/causly.js +192 -0
  6. package/index.js +229 -0
  7. package/package.json +59 -6
  8. package/packs/calendar.js +141 -0
  9. package/packs/command.js +22 -0
  10. package/packs/database.js +95 -0
  11. package/packs/directory.js +63 -0
  12. package/packs/discord.js +63 -0
  13. package/packs/docker.js +202 -0
  14. package/packs/files.js +106 -0
  15. package/packs/git.js +211 -0
  16. package/packs/github.js +321 -0
  17. package/packs/gmail.js +98 -0
  18. package/packs/leads.js +46 -0
  19. package/packs/linear.js +104 -0
  20. package/packs/loader.js +247 -0
  21. package/packs/manifest.json +1152 -0
  22. package/packs/meetings.js +141 -0
  23. package/packs/notion.js +185 -0
  24. package/packs/pipeline.js +151 -0
  25. package/packs/project.js +70 -0
  26. package/packs/registry.js +149 -0
  27. package/packs/reminders.js +57 -0
  28. package/packs/research.js +34 -0
  29. package/packs/secrets.js +77 -0
  30. package/packs/sentry.js +97 -0
  31. package/packs/seo.js +70 -0
  32. package/packs/slack.js +95 -0
  33. package/packs/stripe.js +127 -0
  34. package/packs/supabase.js +73 -0
  35. package/packs/telegram.js +70 -0
  36. package/packs/terraform.js +247 -0
  37. package/packs/vercel.js +114 -0
  38. package/packs/workflow.js +84 -0
  39. package/prompts/cofounder.js +66 -0
  40. package/prompts/playbooks.js +75 -0
  41. package/tools/backupOps.js +87 -0
  42. package/tools/boundaryAttest.js +184 -0
  43. package/tools/calendarOps.js +563 -0
  44. package/tools/cliOps.js +233 -0
  45. package/tools/commandOps.js +198 -0
  46. package/tools/dbOps.js +117 -0
  47. package/tools/directoryOps.js +96 -0
  48. package/tools/discordOps.js +133 -0
  49. package/tools/dockerOps.js +259 -0
  50. package/tools/envFile.js +89 -0
  51. package/tools/envLoader.js +85 -0
  52. package/tools/fileOps.js +125 -0
  53. package/tools/gitOps.js +170 -0
  54. package/tools/githubOps.js +357 -0
  55. package/tools/gmailOps.js +221 -0
  56. package/tools/googleAuth.js +51 -0
  57. package/tools/googleLogin.js +230 -0
  58. package/tools/leadOps.js +447 -0
  59. package/tools/linearOps.js +304 -0
  60. package/tools/logger.js +47 -0
  61. package/tools/meetingOps.js +697 -0
  62. package/tools/notionOps.js +215 -0
  63. package/tools/paths.js +36 -0
  64. package/tools/pipelineOps.js +511 -0
  65. package/tools/projectOps.js +192 -0
  66. package/tools/reminderAlerts.js +48 -0
  67. package/tools/reminderOps.js +129 -0
  68. package/tools/scheduler.js +46 -0
  69. package/tools/secretsOps.js +133 -0
  70. package/tools/security.js +488 -0
  71. package/tools/sentryOps.js +130 -0
  72. package/tools/seoOps.js +561 -0
  73. package/tools/services.js +295 -0
  74. package/tools/setupOps.js +245 -0
  75. package/tools/slackOps.js +151 -0
  76. package/tools/statusOps.js +104 -0
  77. package/tools/store.js +111 -0
  78. package/tools/stripeOps.js +299 -0
  79. package/tools/supabaseOps.js +94 -0
  80. package/tools/telegramOps.js +153 -0
  81. package/tools/terminal.js +124 -0
  82. package/tools/terraformOps.js +171 -0
  83. package/tools/toolWrapper.js +60 -0
  84. package/tools/toolsetOps.js +123 -0
  85. package/tools/transcribeOps.js +221 -0
  86. package/tools/updateCheck.js +58 -0
  87. package/tools/vercelOps.js +198 -0
  88. package/tools/verifyBoundaryAttest.js +25 -0
  89. package/tools/webOps.js +474 -0
  90. package/tools/workflowOps.js +371 -0
  91. 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
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
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)