mcpeasy 0.1.0 → 0.2.0
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.
- checksums.yaml +4 -4
- data/.claudeignore +0 -3
- data/.mcp.json +10 -1
- data/CHANGELOG.md +50 -0
- data/CLAUDE.md +19 -5
- data/README.md +19 -3
- data/lib/mcpeasy/cli.rb +33 -10
- data/lib/mcpeasy/config.rb +22 -1
- data/lib/mcpeasy/setup.rb +1 -0
- data/lib/mcpeasy/version.rb +1 -1
- data/lib/utilities/gcal/README.md +11 -3
- data/lib/utilities/gcal/cli.rb +110 -108
- data/lib/utilities/gcal/mcp.rb +463 -308
- data/lib/utilities/gcal/service.rb +312 -0
- data/lib/utilities/gdrive/README.md +3 -3
- data/lib/utilities/gdrive/cli.rb +98 -96
- data/lib/utilities/gdrive/mcp.rb +290 -288
- data/lib/utilities/gdrive/service.rb +293 -0
- data/lib/utilities/gmeet/cli.rb +131 -129
- data/lib/utilities/gmeet/mcp.rb +374 -372
- data/lib/utilities/gmeet/service.rb +409 -0
- data/lib/utilities/notion/README.md +287 -0
- data/lib/utilities/notion/cli.rb +245 -0
- data/lib/utilities/notion/mcp.rb +607 -0
- data/lib/utilities/notion/service.rb +327 -0
- data/lib/utilities/slack/README.md +3 -3
- data/lib/utilities/slack/cli.rb +69 -54
- data/lib/utilities/slack/mcp.rb +277 -226
- data/lib/utilities/slack/service.rb +134 -0
- metadata +11 -8
- data/env.template +0 -11
- data/lib/utilities/gcal/gcal_tool.rb +0 -308
- data/lib/utilities/gdrive/gdrive_tool.rb +0 -291
- data/lib/utilities/gmeet/gmeet_tool.rb +0 -407
- data/lib/utilities/slack/slack_tool.rb +0 -119
- data/logs/.keep +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 75c32597b80568d81e9dd7b100c73b2ea60a8cdb8e3718683bfa28875e4ef098
|
4
|
+
data.tar.gz: 5c345c73d578163d9b04b7262b39e1489258b14522dcd24189042a51fc9524f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2109cd9167c500802fd0b9ea0145e92fe03de3cb46adca578d924200f4e258c96c3bca39fdf22b094b33920d803cb8792cffad53ec4b262be9363f285fcf7752
|
7
|
+
data.tar.gz: 480c54c57d54194472dc4db20629dc4337cbf93697514ca40d4eb73e53b01028af9137dc83f6a7db1041dc4ca2047a613d40f0756a77bc8627c4fa6fe1e7969e
|
data/.claudeignore
CHANGED
data/.mcp.json
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
7
|
+
|
8
|
+
## [Unreleased]
|
9
|
+
|
10
|
+
## [0.2.0] - 2025-06-03
|
11
|
+
|
12
|
+
### Added
|
13
|
+
- Notion MCP server integration with comprehensive API support
|
14
|
+
- Pagination support for Slack channels listing
|
15
|
+
- Pagination support for Notion user listings and database queries
|
16
|
+
- Google Meet MCP server with meeting search and URL retrieval
|
17
|
+
- Setup command (`mcpz setup`) for initializing configuration directories
|
18
|
+
- Post-install message in gemspec for better user onboarding
|
19
|
+
- Shared authentication server for Google services OAuth flow
|
20
|
+
- MCP server mode for all services (Slack, Google Calendar, Drive, Meet, Notion)
|
21
|
+
- CLI interface with `mcpz` command for all services
|
22
|
+
- Configuration management system storing credentials in `~/.config/mcpeasy/`
|
23
|
+
- Logging system with logs stored in `~/.local/share/mcpeasy/logs/`
|
24
|
+
|
25
|
+
### Changed
|
26
|
+
- Refactored project structure for better consistency and namespacing
|
27
|
+
- Converted project from standalone scripts to Ruby gem
|
28
|
+
- Moved from individual MCP servers to unified gem architecture
|
29
|
+
- Refactored Google services to share authentication token capture server
|
30
|
+
- Improved MCP server implementation with fresh tool instances per call
|
31
|
+
- Standardized service structure with consistent cli.rb, mcp.rb, service.rb pattern
|
32
|
+
|
33
|
+
### Fixed
|
34
|
+
- Emoji rendering in Google token capture service
|
35
|
+
- Ruby code style compliance with standardrb
|
36
|
+
|
37
|
+
### Removed
|
38
|
+
- Unused project files and dependencies
|
39
|
+
- Git submodules for external MCP servers
|
40
|
+
- Direct dependency on ruby-sdk in favor of hand-rolled implementation
|
41
|
+
|
42
|
+
## [0.1.0] - Initial Release
|
43
|
+
|
44
|
+
### Added
|
45
|
+
- Initial gem structure with Thor-based CLI
|
46
|
+
- Slack integration with message posting and channel listing
|
47
|
+
- Google Calendar integration with event listing and search
|
48
|
+
- Google Drive integration with file search and content retrieval
|
49
|
+
- Basic MCP server implementations for all services
|
50
|
+
- Development tooling with standardrb for code quality
|
data/CLAUDE.md
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
4
4
|
|
5
|
+
## Important Reminders
|
6
|
+
|
7
|
+
**Date/Time Accuracy**: The environment context date provided at startup may be incorrect. Always verify the current date and time using the `date` command when needed. Also watch out for time/date terms which are relative to today's date, e.g. "tomorrow", "this week" or "the next 48 hours".
|
8
|
+
|
5
9
|
## Project Overview
|
6
10
|
|
7
11
|
**MCPEasy** is a Ruby gem that provides multiple Model Context Protocol (MCP) servers for integrating with AI assistants like Claude Code. The gem includes MCP servers for:
|
@@ -67,6 +71,16 @@ Run linting:
|
|
67
71
|
bundle exec standardrb
|
68
72
|
```
|
69
73
|
|
74
|
+
Searching within project files:
|
75
|
+
```bash
|
76
|
+
git grep "search pattern example"
|
77
|
+
```
|
78
|
+
|
79
|
+
Move or rename files:
|
80
|
+
```bash
|
81
|
+
git mv old_file_name new_file_name
|
82
|
+
```
|
83
|
+
|
70
84
|
Build gem:
|
71
85
|
```bash
|
72
86
|
gem build mcpeasy.gemspec
|
@@ -139,21 +153,21 @@ Each service directory follows a consistent structure with four key components:
|
|
139
153
|
- Extends Thor for command-line interface functionality
|
140
154
|
- Provides user-friendly CLI commands for the service
|
141
155
|
- Handles argument parsing and validation
|
142
|
-
- Calls into the
|
156
|
+
- Calls into the `service.rb` for actual service operations
|
143
157
|
- Example: `mcpz slack post` command implementation
|
144
158
|
|
145
159
|
##### `mcp.rb` - MCP Server Implementation
|
146
160
|
- Implements the Model Context Protocol JSON-RPC server
|
147
161
|
- Handles MCP initialization, tool registration, and request processing
|
148
|
-
- Translates MCP tool calls into
|
162
|
+
- Translates MCP tool calls into `service.rb` method calls
|
149
163
|
- Provides structured responses back to AI assistants
|
150
164
|
- Runs as a persistent server process when called with `mcpz [service] mcp`
|
151
165
|
|
152
|
-
#####
|
166
|
+
##### `service.rb` - Core Service Functionality
|
153
167
|
- Contains the main business logic for interacting with external APIs
|
154
168
|
- Handles authentication, API calls, error handling, and response formatting
|
155
169
|
- Shared between both CLI and MCP modes for consistency
|
156
|
-
-
|
170
|
+
- Each service has its own `service.rb` file within its directory
|
157
171
|
- Designed to be framework-agnostic and reusable
|
158
172
|
|
159
173
|
##### `README.md` - Service-specific Documentation
|
@@ -167,4 +181,4 @@ Each service directory follows a consistent structure with four key components:
|
|
167
181
|
All services follow the same pattern:
|
168
182
|
1. **CLI mode**: Direct command-line usage via `mcpz [service] [command]`
|
169
183
|
2. **MCP mode**: JSON-RPC server mode via `mcpz [service] mcp`
|
170
|
-
3. **Authentication**: Service-specific auth handling with shared config storage
|
184
|
+
3. **Authentication**: Service-specific auth handling with shared config storage
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# MCPeasy
|
2
2
|
|
3
3
|
A Ruby gem that provides multiple Model Context Protocol (MCP) servers for integrating with AI assistants like Claude Code. Each MCP server provides programmatic access to popular web services and APIs.
|
4
4
|
|
@@ -36,6 +36,11 @@ Find and manage Google Meet meetings from your calendar.
|
|
36
36
|
- CLI: List meetings, search by content, get meeting URLs
|
37
37
|
- MCP: AI assistant access to upcoming meetings and direct links
|
38
38
|
|
39
|
+
### 📝 [Notion](./lib/utilities/notion/)
|
40
|
+
Search pages and databases in your Notion workspace.
|
41
|
+
- CLI: Search pages/databases, retrieve content, query database entries
|
42
|
+
- MCP: AI assistant access to Notion workspace content and organization
|
43
|
+
|
39
44
|
## Quick Start
|
40
45
|
|
41
46
|
### 1. Configuration Setup
|
@@ -54,6 +59,9 @@ mcpz slack set_bot_token xoxb-your-slack-token
|
|
54
59
|
|
55
60
|
# For Google services (Calendar, Drive, Meet)
|
56
61
|
mcpz google auth
|
62
|
+
|
63
|
+
# For Notion
|
64
|
+
mcpz notion set_api_key secret_your-notion-integration-token
|
57
65
|
```
|
58
66
|
|
59
67
|
Credentials are stored securely in `~/.config/mcpeasy/` (see individual server documentation for specific setup requirements).
|
@@ -74,6 +82,9 @@ mcpz gdrive search "quarterly report"
|
|
74
82
|
|
75
83
|
# Google Meet
|
76
84
|
mcpz gmeet upcoming
|
85
|
+
|
86
|
+
# Notion
|
87
|
+
mcpz notion search_pages "meeting notes"
|
77
88
|
```
|
78
89
|
|
79
90
|
### 3. MCP Server Configuration
|
@@ -98,6 +109,10 @@ For use with Claude Code, add servers to your `.mcp.json`:
|
|
98
109
|
"gmeet": {
|
99
110
|
"command": "mcpz",
|
100
111
|
"args": ["gmeet", "mcp"]
|
112
|
+
},
|
113
|
+
"notion": {
|
114
|
+
"command": "mcpz",
|
115
|
+
"args": ["notion", "mcp"]
|
101
116
|
}
|
102
117
|
}
|
103
118
|
}
|
@@ -141,7 +156,8 @@ lib/
|
|
141
156
|
├── slack/ # Slack integration
|
142
157
|
├── gcal/ # Google Calendar
|
143
158
|
├── gdrive/ # Google Drive
|
144
|
-
|
159
|
+
├── gmeet/ # Google Meet
|
160
|
+
└── notion/ # Notion integration
|
145
161
|
```
|
146
162
|
|
147
163
|
### Contributing
|
@@ -158,4 +174,4 @@ This project is licensed under the MIT License.
|
|
158
174
|
|
159
175
|
## Support
|
160
176
|
|
161
|
-
For issues, questions, or contributions, please visit the project repository.
|
177
|
+
For issues, questions, or contributions, please visit the project repository.
|
data/lib/mcpeasy/cli.rb
CHANGED
@@ -7,8 +7,8 @@ module Mcpeasy
|
|
7
7
|
class GoogleCommands < Thor
|
8
8
|
desc "auth", "Authenticate with Google services (Calendar, Drive, Meet)"
|
9
9
|
def auth
|
10
|
-
require_relative "../utilities/gcal/
|
11
|
-
tool =
|
10
|
+
require_relative "../utilities/gcal/service"
|
11
|
+
tool = Gcal::Service.new(skip_auth: true)
|
12
12
|
result = tool.authenticate
|
13
13
|
if result[:success]
|
14
14
|
puts "✅ Successfully authenticated with Google services"
|
@@ -23,52 +23,52 @@ module Mcpeasy
|
|
23
23
|
# Load the existing GcalCLI and extend it with MCP functionality
|
24
24
|
require_relative "../utilities/gcal/cli"
|
25
25
|
|
26
|
-
class GcalCommands <
|
26
|
+
class GcalCommands < Gcal::CLI
|
27
27
|
namespace "gcal"
|
28
28
|
|
29
29
|
desc "mcp", "Run Google Calendar MCP server"
|
30
30
|
def mcp
|
31
31
|
require_relative "../utilities/gcal/mcp"
|
32
|
-
MCPServer.new.run
|
32
|
+
Gcal::MCPServer.new.run
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
36
|
# Load the existing GdriveCLI and extend it with MCP functionality
|
37
37
|
require_relative "../utilities/gdrive/cli"
|
38
38
|
|
39
|
-
class GdriveCommands <
|
39
|
+
class GdriveCommands < Gdrive::CLI
|
40
40
|
namespace "gdrive"
|
41
41
|
|
42
42
|
desc "mcp", "Run Google Drive MCP server"
|
43
43
|
def mcp
|
44
44
|
require_relative "../utilities/gdrive/mcp"
|
45
|
-
MCPServer.new.run
|
45
|
+
Gdrive::MCPServer.new.run
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
49
|
# Load the existing GmeetCLI and extend it with MCP functionality
|
50
50
|
require_relative "../utilities/gmeet/cli"
|
51
51
|
|
52
|
-
class GmeetCommands <
|
52
|
+
class GmeetCommands < Gmeet::CLI
|
53
53
|
namespace "gmeet"
|
54
54
|
|
55
55
|
desc "mcp", "Run Google Meet MCP server"
|
56
56
|
def mcp
|
57
57
|
require_relative "../utilities/gmeet/mcp"
|
58
|
-
MCPServer.new.run
|
58
|
+
Gmeet::MCPServer.new.run
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
62
|
# Load the existing SlackCLI and extend it with MCP functionality
|
63
63
|
require_relative "../utilities/slack/cli"
|
64
64
|
|
65
|
-
class SlackCommands <
|
65
|
+
class SlackCommands < Slack::CLI
|
66
66
|
namespace "slack"
|
67
67
|
|
68
68
|
desc "mcp", "Run Slack MCP server"
|
69
69
|
def mcp
|
70
70
|
require_relative "../utilities/slack/mcp"
|
71
|
-
MCPServer.new.run
|
71
|
+
Slack::MCPServer.new.run
|
72
72
|
end
|
73
73
|
|
74
74
|
desc "set_bot_token TOKEN", "Set Slack bot token"
|
@@ -84,6 +84,25 @@ module Mcpeasy
|
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
|
+
# Load the existing NotionCLI and extend it with MCP functionality
|
88
|
+
require_relative "../utilities/notion/cli"
|
89
|
+
|
90
|
+
class NotionCommands < Notion::CLI
|
91
|
+
namespace "notion"
|
92
|
+
|
93
|
+
desc "mcp", "Run Notion MCP server"
|
94
|
+
def mcp
|
95
|
+
require_relative "../utilities/notion/mcp"
|
96
|
+
Notion::MCPServer.new.run
|
97
|
+
end
|
98
|
+
|
99
|
+
desc "set_api_key API_KEY", "Set Notion API key"
|
100
|
+
def set_api_key(api_key)
|
101
|
+
Config.save_notion_api_key(api_key)
|
102
|
+
puts "✅ Notion API key saved successfully"
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
87
106
|
class CLI < Thor
|
88
107
|
desc "version", "Show mcpeasy version"
|
89
108
|
def version
|
@@ -105,6 +124,7 @@ module Mcpeasy
|
|
105
124
|
puts "🔑 Google credentials: #{status[:google_credentials] ? "✅" : "❌"}"
|
106
125
|
puts "🎫 Google token: #{status[:google_token] ? "✅" : "❌"}"
|
107
126
|
puts "💬 Slack config: #{status[:slack_config] ? "✅" : "❌"}"
|
127
|
+
puts "📝 Notion config: #{status[:notion_config] ? "✅" : "❌"}"
|
108
128
|
end
|
109
129
|
|
110
130
|
desc "set_google_credentials PATH", "Save Google credentials from downloaded JSON file"
|
@@ -143,6 +163,9 @@ module Mcpeasy
|
|
143
163
|
desc "slack COMMAND", "Slack commands"
|
144
164
|
subcommand "slack", SlackCommands
|
145
165
|
|
166
|
+
desc "notion COMMAND", "Notion commands"
|
167
|
+
subcommand "notion", NotionCommands
|
168
|
+
|
146
169
|
class << self
|
147
170
|
private
|
148
171
|
|
data/lib/mcpeasy/config.rb
CHANGED
@@ -9,6 +9,7 @@ module Mcpeasy
|
|
9
9
|
CONFIG_DIR = File.expand_path("~/.config/mcpeasy").freeze
|
10
10
|
GOOGLE_DIR = File.join(CONFIG_DIR, "google").freeze
|
11
11
|
SLACK_DIR = File.join(CONFIG_DIR, "slack").freeze
|
12
|
+
NOTION_DIR = File.join(CONFIG_DIR, "notion").freeze
|
12
13
|
LOGS_DIR = File.expand_path("~/.local/share/mcpeasy/logs").freeze
|
13
14
|
|
14
15
|
class << self
|
@@ -16,6 +17,7 @@ module Mcpeasy
|
|
16
17
|
FileUtils.mkdir_p(CONFIG_DIR)
|
17
18
|
FileUtils.mkdir_p(GOOGLE_DIR)
|
18
19
|
FileUtils.mkdir_p(SLACK_DIR)
|
20
|
+
FileUtils.mkdir_p(NOTION_DIR)
|
19
21
|
FileUtils.mkdir_p(LOGS_DIR)
|
20
22
|
end
|
21
23
|
|
@@ -79,6 +81,24 @@ module Mcpeasy
|
|
79
81
|
File.write(slack_token_path, JSON.pretty_generate(config))
|
80
82
|
end
|
81
83
|
|
84
|
+
# Notion configuration
|
85
|
+
def notion_token_path
|
86
|
+
File.join(NOTION_DIR, "token.json")
|
87
|
+
end
|
88
|
+
|
89
|
+
def notion_api_key
|
90
|
+
return nil unless File.exist?(notion_token_path)
|
91
|
+
config = JSON.parse(File.read(notion_token_path))
|
92
|
+
config["api_key"]
|
93
|
+
end
|
94
|
+
|
95
|
+
def save_notion_api_key(api_key)
|
96
|
+
ensure_config_dirs
|
97
|
+
config = File.exist?(notion_token_path) ? JSON.parse(File.read(notion_token_path)) : {}
|
98
|
+
config["api_key"] = api_key
|
99
|
+
File.write(notion_token_path, JSON.pretty_generate(config))
|
100
|
+
end
|
101
|
+
|
82
102
|
# Logs directory
|
83
103
|
def logs_dir
|
84
104
|
LOGS_DIR
|
@@ -94,7 +114,8 @@ module Mcpeasy
|
|
94
114
|
logs_dir: LOGS_DIR,
|
95
115
|
google_credentials: File.exist?(google_credentials_path),
|
96
116
|
google_token: File.exist?(google_token_path),
|
97
|
-
slack_config: File.exist?(slack_token_path)
|
117
|
+
slack_config: File.exist?(slack_token_path),
|
118
|
+
notion_config: File.exist?(notion_token_path)
|
98
119
|
}
|
99
120
|
end
|
100
121
|
end
|
data/lib/mcpeasy/setup.rb
CHANGED
data/lib/mcpeasy/version.rb
CHANGED
@@ -128,6 +128,14 @@ The server provides these tools to Claude Code:
|
|
128
128
|
- **list_calendars**: List available calendars
|
129
129
|
- **search_events**: Search for events by text content
|
130
130
|
|
131
|
+
The server also provides helpful prompts for common calendar queries:
|
132
|
+
|
133
|
+
- **check_schedule**: Check your calendar schedule for a specific time period
|
134
|
+
- **find_meeting**: Find a specific meeting or event by searching for keywords
|
135
|
+
- **check_availability**: Check if you're free at a specific time
|
136
|
+
- **weekly_overview**: Get an overview of your schedule for the upcoming week
|
137
|
+
- **meeting_conflicts**: Check for any overlapping or back-to-back meetings
|
138
|
+
|
131
139
|
## Security & Permissions
|
132
140
|
|
133
141
|
### Required OAuth Scopes
|
@@ -201,14 +209,14 @@ tail -f logs/mcp_gcal_startup.log
|
|
201
209
|
utilities/gcal/
|
202
210
|
├── cli.rb # Thor-based CLI interface
|
203
211
|
├── mcp.rb # MCP server implementation
|
204
|
-
├──
|
212
|
+
├── service.rb # Google Calendar API wrapper
|
205
213
|
└── README.md # This file
|
206
214
|
```
|
207
215
|
|
208
216
|
### Adding New Features
|
209
217
|
|
210
|
-
1. **New API methods**: Add to `
|
211
|
-
2. **New CLI commands**: Add to `
|
218
|
+
1. **New API methods**: Add to `Service` class
|
219
|
+
2. **New CLI commands**: Add to `CLI` class
|
212
220
|
3. **New MCP tools**: Add to `MCPServer` class
|
213
221
|
|
214
222
|
### Testing
|