quickcall-integrations 0.1.6__tar.gz → 0.1.8__tar.gz

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 (37) hide show
  1. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/.gitignore +5 -0
  2. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/PKG-INFO +99 -9
  3. quickcall_integrations-0.1.8/README.md +231 -0
  4. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/mcp_server/__init__.py +1 -1
  5. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/mcp_server/api_clients/github_client.py +26 -4
  6. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/mcp_server/api_clients/slack_client.py +189 -9
  7. quickcall_integrations-0.1.8/mcp_server/resources/__init__.py +1 -0
  8. quickcall_integrations-0.1.8/mcp_server/resources/slack_resources.py +50 -0
  9. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/mcp_server/server.py +4 -0
  10. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/mcp_server/tools/auth_tools.py +87 -3
  11. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/mcp_server/tools/slack_tools.py +159 -3
  12. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/plugins/quickcall/.claude-plugin/plugin.json +1 -1
  13. quickcall_integrations-0.1.8/plugins/quickcall/commands/connect.md +31 -0
  14. quickcall_integrations-0.1.8/plugins/quickcall/commands/slack-summary.md +56 -0
  15. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/pyproject.toml +2 -1
  16. quickcall_integrations-0.1.6/tests/test_auth_flow.py → quickcall_integrations-0.1.8/tests/test_integrations.py +139 -7
  17. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/uv.lock +93 -1
  18. quickcall_integrations-0.1.6/README.md +0 -142
  19. quickcall_integrations-0.1.6/plugins/quickcall/.mcp.json +0 -8
  20. quickcall_integrations-0.1.6/plugins/quickcall/commands/connect.md +0 -37
  21. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/.claude-plugin/marketplace.json +0 -0
  22. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/.github/workflows/publish-pypi.yml +0 -0
  23. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/Dockerfile +0 -0
  24. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/assets/logo.png +0 -0
  25. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/mcp_server/api_clients/__init__.py +0 -0
  26. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/mcp_server/auth/__init__.py +0 -0
  27. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/mcp_server/auth/credentials.py +0 -0
  28. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/mcp_server/auth/device_flow.py +0 -0
  29. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/mcp_server/tools/__init__.py +0 -0
  30. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/mcp_server/tools/git_tools.py +0 -0
  31. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/mcp_server/tools/github_tools.py +0 -0
  32. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/mcp_server/tools/utility_tools.py +0 -0
  33. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/plugins/quickcall/commands/status.md +0 -0
  34. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/plugins/quickcall/commands/updates.md +0 -0
  35. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/requirements.txt +0 -0
  36. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/tests/README.md +0 -0
  37. {quickcall_integrations-0.1.6 → quickcall_integrations-0.1.8}/tests/test_tools.py +0 -0
@@ -1,4 +1,9 @@
1
1
  internal-docs/
2
+
3
+ # Local MCP config (for dev testing - not committed)
4
+ .mcp.json
5
+ localtest.mcp.json
6
+
2
7
  # Secrets and environment
3
8
  secrets/
4
9
  *.env
@@ -1,12 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: quickcall-integrations
3
- Version: 0.1.6
3
+ Version: 0.1.8
4
4
  Summary: MCP server with developer integrations for Claude Code and Cursor
5
5
  Requires-Python: >=3.10
6
6
  Requires-Dist: fastmcp>=2.13.0
7
7
  Requires-Dist: httpx>=0.28.0
8
8
  Requires-Dist: pydantic>=2.11.7
9
9
  Requires-Dist: pygithub>=2.8.1
10
+ Requires-Dist: rapidfuzz>=3.0.0
10
11
  Description-Content-Type: text/markdown
11
12
 
12
13
  <p align="center">
@@ -34,11 +35,69 @@ Description-Content-Type: text/markdown
34
35
 
35
36
  ---
36
37
 
38
+ ## Capabilities
39
+
40
+ - **Get standup updates** from git history (commits, diffs, stats)
41
+ - **List PRs, commits, branches** from GitHub repos
42
+ - **Read & send Slack messages** with auto thread fetching
43
+ - **Fuzzy channel matching** - say "no sleep dev" and it finds "no-sleep-dev-channel"
44
+ - **Summarize Slack channels** - get key discussions from last N days
45
+
37
46
  ## Integrations
38
47
 
39
- - **Git** - commits, diffs, code changes (always available)
40
- - **GitHub** - repos, PRs, commits, branches (requires QuickCall account)
41
- - **Slack** - send messages, list channels/users (requires QuickCall account)
48
+ | Integration | Features | Auth Required |
49
+ |-------------|----------|---------------|
50
+ | **Git** | Commits, diffs, standup summaries | No |
51
+ | **GitHub** | Repos, PRs, commits, branches | Yes |
52
+ | **Slack** | Read/send messages, threads, channels | Yes |
53
+
54
+ <details>
55
+ <summary><strong>Available Tools (23)</strong></summary>
56
+
57
+ ### Git
58
+ | Tool | Description |
59
+ |------|-------------|
60
+ | `get_updates` | Get git commits, diff stats, and uncommitted changes |
61
+
62
+ ### GitHub
63
+ | Tool | Description |
64
+ |------|-------------|
65
+ | `list_repos` | List accessible repositories |
66
+ | `list_prs` | List pull requests (open/closed/all) |
67
+ | `get_pr` | Get PR details (title, description, files changed) |
68
+ | `list_commits` | List commits with optional filters |
69
+ | `get_commit` | Get commit details (message, stats, files) |
70
+ | `list_branches` | List repository branches |
71
+ | `check_github_connection` | Verify GitHub connection |
72
+
73
+ ### Slack
74
+ | Tool | Description |
75
+ |------|-------------|
76
+ | `list_slack_channels` | List channels bot has access to |
77
+ | `send_slack_message` | Send message to a channel |
78
+ | `read_slack_messages` | Read messages with threads auto-fetched |
79
+ | `read_slack_thread` | Read replies in a thread |
80
+ | `list_slack_users` | List workspace users |
81
+ | `check_slack_connection` | Verify Slack connection |
82
+ | `reconnect_slack` | Re-authorize to get new permissions |
83
+
84
+ ### Auth
85
+ | Tool | Description |
86
+ |------|-------------|
87
+ | `connect_quickcall` | Start device flow authentication |
88
+ | `check_quickcall_status` | Check connection status |
89
+ | `disconnect_quickcall` | Remove local credentials |
90
+ | `connect_github` | Install GitHub App |
91
+ | `connect_slack` | Authorize Slack App |
92
+
93
+ ### Utility
94
+ | Tool | Description |
95
+ |------|-------------|
96
+ | `get_current_datetime` | Get current UTC datetime |
97
+ | `calculate_date_range` | Calculate date range for queries |
98
+ | `calculate_date_offset` | Add/subtract time from a date |
99
+
100
+ </details>
42
101
 
43
102
  ## Install
44
103
 
@@ -113,14 +172,45 @@ Credentials are stored locally in `~/.quickcall/credentials.json`.
113
172
  | `/quickcall:status` | Show connection status |
114
173
  | `/quickcall:updates` | Get git updates (default: 1 day) |
115
174
  | `/quickcall:updates 7d` | Get updates for last 7 days |
175
+ | `/quickcall:slack-summary` | Summarize Slack messages (default: 1 day) |
176
+ | `/quickcall:slack-summary 7d` | Summarize last 7 days |
116
177
 
117
178
  ### Cursor / Other IDEs
118
179
 
119
- Ask the AI naturally:
120
- - "What did I work on today?"
121
- - "Show me my open PRs"
122
- - "List my GitHub repos"
123
- - "Send a message to #general on Slack"
180
+ Ask the AI naturally - see examples below.
181
+
182
+ ## Example Prompts
183
+
184
+ ### Git
185
+ ```
186
+ What did I work on today?
187
+ Give me a standup summary for the last 3 days
188
+ What changes are uncommitted?
189
+ ```
190
+
191
+ ### GitHub
192
+ ```
193
+ List my repos
194
+ Show open PRs on [repo-name]
195
+ What commits were made this week?
196
+ Get details of PR #123
197
+ List branches on [repo-name]
198
+ ```
199
+
200
+ ### Slack
201
+ ```
202
+ Send "Build completed" to #deployments
203
+ What messages were posted in dev channel today?
204
+ Read messages from no sleep dev (fuzzy matches "no-sleep-dev-channel")
205
+ Summarize what was discussed in #engineering this week
206
+ List channels I have access to
207
+ ```
208
+
209
+ ### Combined
210
+ ```
211
+ List open PRs on [repo] and send titles to #updates channel
212
+ What did I work on this week? Send summary to #standup
213
+ ```
124
214
 
125
215
  ## Troubleshooting
126
216
 
@@ -0,0 +1,231 @@
1
+ <p align="center">
2
+ <img src="https://quickcall.dev/assets/v1/qc-full-512px-white.png" alt="QuickCall" width="400">
3
+ </p>
4
+
5
+ <h3 align="center">Eliminate interruptions for developers</h3>
6
+
7
+ <p align="center">
8
+ <em>Ask about your work, get instant answers. No more context switching.</em>
9
+ </p>
10
+
11
+ <p align="center">
12
+ <a href="https://quickcall.dev"><img src="https://img.shields.io/badge/Web-quickcall.dev-000000?logo=googlechrome&logoColor=white" alt="Web"></a>
13
+ <a href="https://discord.gg/DtnMxuE35v"><img src="https://img.shields.io/badge/Discord-Join%20Us-5865F2?logo=discord&logoColor=white" alt="Discord"></a>
14
+ </p>
15
+
16
+ <p align="center">
17
+ <a href="#integrations">Integrations</a> |
18
+ <a href="#install">Install</a> |
19
+ <a href="#authentication">Authentication</a> |
20
+ <a href="#commands">Commands</a> |
21
+ <a href="#troubleshooting">Troubleshooting</a>
22
+ </p>
23
+
24
+ ---
25
+
26
+ ## Capabilities
27
+
28
+ - **Get standup updates** from git history (commits, diffs, stats)
29
+ - **List PRs, commits, branches** from GitHub repos
30
+ - **Read & send Slack messages** with auto thread fetching
31
+ - **Fuzzy channel matching** - say "no sleep dev" and it finds "no-sleep-dev-channel"
32
+ - **Summarize Slack channels** - get key discussions from last N days
33
+
34
+ ## Integrations
35
+
36
+ | Integration | Features | Auth Required |
37
+ |-------------|----------|---------------|
38
+ | **Git** | Commits, diffs, standup summaries | No |
39
+ | **GitHub** | Repos, PRs, commits, branches | Yes |
40
+ | **Slack** | Read/send messages, threads, channels | Yes |
41
+
42
+ <details>
43
+ <summary><strong>Available Tools (23)</strong></summary>
44
+
45
+ ### Git
46
+ | Tool | Description |
47
+ |------|-------------|
48
+ | `get_updates` | Get git commits, diff stats, and uncommitted changes |
49
+
50
+ ### GitHub
51
+ | Tool | Description |
52
+ |------|-------------|
53
+ | `list_repos` | List accessible repositories |
54
+ | `list_prs` | List pull requests (open/closed/all) |
55
+ | `get_pr` | Get PR details (title, description, files changed) |
56
+ | `list_commits` | List commits with optional filters |
57
+ | `get_commit` | Get commit details (message, stats, files) |
58
+ | `list_branches` | List repository branches |
59
+ | `check_github_connection` | Verify GitHub connection |
60
+
61
+ ### Slack
62
+ | Tool | Description |
63
+ |------|-------------|
64
+ | `list_slack_channels` | List channels bot has access to |
65
+ | `send_slack_message` | Send message to a channel |
66
+ | `read_slack_messages` | Read messages with threads auto-fetched |
67
+ | `read_slack_thread` | Read replies in a thread |
68
+ | `list_slack_users` | List workspace users |
69
+ | `check_slack_connection` | Verify Slack connection |
70
+ | `reconnect_slack` | Re-authorize to get new permissions |
71
+
72
+ ### Auth
73
+ | Tool | Description |
74
+ |------|-------------|
75
+ | `connect_quickcall` | Start device flow authentication |
76
+ | `check_quickcall_status` | Check connection status |
77
+ | `disconnect_quickcall` | Remove local credentials |
78
+ | `connect_github` | Install GitHub App |
79
+ | `connect_slack` | Authorize Slack App |
80
+
81
+ ### Utility
82
+ | Tool | Description |
83
+ |------|-------------|
84
+ | `get_current_datetime` | Get current UTC datetime |
85
+ | `calculate_date_range` | Calculate date range for queries |
86
+ | `calculate_date_offset` | Add/subtract time from a date |
87
+
88
+ </details>
89
+
90
+ ## Install
91
+
92
+ ### Claude Code
93
+
94
+ ```
95
+ /plugin marketplace add quickcall-dev/quickcall-integrations
96
+ /plugin install quickcall@quickcall-integrations
97
+ ```
98
+
99
+ <details>
100
+ <summary>MCP only (without plugin)</summary>
101
+
102
+ ```bash
103
+ claude mcp add quickcall -- uvx quickcall-integrations
104
+ ```
105
+ </details>
106
+
107
+ <details>
108
+ <summary>Update to latest version</summary>
109
+
110
+ ```
111
+ /plugin marketplace update quickcall-integrations
112
+ /plugin uninstall quickcall
113
+ /plugin install quickcall@quickcall-integrations
114
+ ```
115
+
116
+ After updating, restart Claude Code or open a new terminal.
117
+ </details>
118
+
119
+ ### Cursor
120
+
121
+ Add to your Cursor MCP config (`~/.cursor/mcp.json` for global, or `.cursor/mcp.json` for project):
122
+
123
+ ```json
124
+ {
125
+ "mcpServers": {
126
+ "quickcall": {
127
+ "command": "uvx",
128
+ "args": ["quickcall-integrations"]
129
+ }
130
+ }
131
+ }
132
+ ```
133
+
134
+ Then restart Cursor.
135
+
136
+ > Also works with [Antigravity](https://antigravity.dev) and any other IDE that supports MCP servers.
137
+
138
+ ## Authentication
139
+
140
+ To use GitHub and Slack integrations, connect your QuickCall account:
141
+
142
+ ```
143
+ /quickcall:connect
144
+ ```
145
+
146
+ This will guide you through:
147
+ 1. Sign in with Google
148
+ 2. Install GitHub App to your org/account
149
+ 3. Connect Slack workspace
150
+
151
+ Credentials are stored locally in `~/.quickcall/credentials.json`.
152
+
153
+ ## Commands
154
+
155
+ ### Claude Code
156
+
157
+ | Command | Description |
158
+ |---------|-------------|
159
+ | `/quickcall:connect` | Connect QuickCall, GitHub, and Slack |
160
+ | `/quickcall:status` | Show connection status |
161
+ | `/quickcall:updates` | Get git updates (default: 1 day) |
162
+ | `/quickcall:updates 7d` | Get updates for last 7 days |
163
+ | `/quickcall:slack-summary` | Summarize Slack messages (default: 1 day) |
164
+ | `/quickcall:slack-summary 7d` | Summarize last 7 days |
165
+
166
+ ### Cursor / Other IDEs
167
+
168
+ Ask the AI naturally - see examples below.
169
+
170
+ ## Example Prompts
171
+
172
+ ### Git
173
+ ```
174
+ What did I work on today?
175
+ Give me a standup summary for the last 3 days
176
+ What changes are uncommitted?
177
+ ```
178
+
179
+ ### GitHub
180
+ ```
181
+ List my repos
182
+ Show open PRs on [repo-name]
183
+ What commits were made this week?
184
+ Get details of PR #123
185
+ List branches on [repo-name]
186
+ ```
187
+
188
+ ### Slack
189
+ ```
190
+ Send "Build completed" to #deployments
191
+ What messages were posted in dev channel today?
192
+ Read messages from no sleep dev (fuzzy matches "no-sleep-dev-channel")
193
+ Summarize what was discussed in #engineering this week
194
+ List channels I have access to
195
+ ```
196
+
197
+ ### Combined
198
+ ```
199
+ List open PRs on [repo] and send titles to #updates channel
200
+ What did I work on this week? Send summary to #standup
201
+ ```
202
+
203
+ ## Troubleshooting
204
+
205
+ ### Plugin Not Updating?
206
+
207
+ If new commands don't appear after updating, clear the cache:
208
+
209
+ ```bash
210
+ rm -rf ~/.claude/plugins/cache/quickcall-integrations
211
+ rm -rf ~/.claude/plugins/marketplaces/quickcall-integrations
212
+ ```
213
+
214
+ Then restart Claude Code and reinstall:
215
+
216
+ ```
217
+ /plugin marketplace add quickcall-dev/quickcall-integrations
218
+ /plugin install quickcall@quickcall-integrations
219
+ ```
220
+
221
+ ### Commands Not Showing?
222
+
223
+ Type `/quickcall:` - you should see `connect`, `status`, `updates`.
224
+
225
+ If only `updates` shows, run the cleanup above and reinstall.
226
+
227
+ ---
228
+
229
+ <p align="center">
230
+ Built with ❤️ by <a href="https://quickcall.dev">QuickCall</a>
231
+ </p>
@@ -3,4 +3,4 @@ MCP Server for QuickCall
3
3
  GitHub integration tools for AI assistant
4
4
  """
5
5
 
6
- __version__ = "0.3.4"
6
+ __version__ = "0.1.8"
@@ -127,14 +127,36 @@ class GitHubClient:
127
127
  def health_check(self) -> bool:
128
128
  """Check if GitHub API is accessible with the token."""
129
129
  try:
130
- self.gh.get_user().login
131
- return True
130
+ # Use installation/repositories endpoint - works with GitHub App tokens
131
+ with httpx.Client() as client:
132
+ response = client.get(
133
+ "https://api.github.com/installation/repositories",
134
+ headers={
135
+ "Authorization": f"Bearer {self.token}",
136
+ "Accept": "application/vnd.github+json",
137
+ "X-GitHub-Api-Version": "2022-11-28",
138
+ },
139
+ params={"per_page": 1},
140
+ )
141
+ return response.status_code == 200
132
142
  except Exception:
133
143
  return False
134
144
 
135
145
  def get_authenticated_user(self) -> str:
136
- """Get the username of the authenticated user."""
137
- return self.gh.get_user().login
146
+ """
147
+ Get the GitHub username associated with this installation.
148
+
149
+ Note: GitHub App installation tokens can't access /user endpoint.
150
+ We return the installation owner instead.
151
+ """
152
+ # Try to get from first repo's owner
153
+ try:
154
+ repos = self.list_repos(limit=1)
155
+ if repos:
156
+ return repos[0].owner.login
157
+ except Exception:
158
+ pass
159
+ return "GitHub App" # Fallback
138
160
 
139
161
  def close(self):
140
162
  """Close GitHub API client."""