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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5a8fd6efbce3698cb6ab7c807ee5b496f6f150108779991c4b2dac8d28822a64
4
- data.tar.gz: 98e8f1895a741151767ca65243f3d83adc3feb37342624c35834bf2d0e4beeb4
3
+ metadata.gz: 75c32597b80568d81e9dd7b100c73b2ea60a8cdb8e3718683bfa28875e4ef098
4
+ data.tar.gz: 5c345c73d578163d9b04b7262b39e1489258b14522dcd24189042a51fc9524f4
5
5
  SHA512:
6
- metadata.gz: '07081dab8205a10e379933b40f9f618e7cb0ff05781f77b4ee7700c4a64b67f309346510d7677b813c09498a5172622ec8290294b4ffecdef5f6143a4777cac6'
7
- data.tar.gz: 14e812027277e6035e6ab21cfb0730b35e1084c03b17ea2ca905a3654923da14fa2a8c183295904f913262a9a24e56078019384344387da7735523d8de148eb3
6
+ metadata.gz: 2109cd9167c500802fd0b9ea0145e92fe03de3cb46adca578d924200f4e258c96c3bca39fdf22b094b33920d803cb8792cffad53ec4b262be9363f285fcf7752
7
+ data.tar.gz: 480c54c57d54194472dc4db20629dc4337cbf93697514ca40d4eb73e53b01028af9137dc83f6a7db1041dc4ca2047a613d40f0756a77bc8627c4fa6fe1e7969e
data/.claudeignore CHANGED
@@ -1,4 +1 @@
1
1
  .env
2
- client_secret_*.apps.googleusercontent.com.json
3
- google_credentials.json
4
- .google-token.json
data/.mcp.json CHANGED
@@ -35,6 +35,15 @@
35
35
  "mcp"
36
36
  ],
37
37
  "env": {}
38
+ },
39
+ "notion": {
40
+ "type": "stdio",
41
+ "command": "./bin/mcpz",
42
+ "args": [
43
+ "notion",
44
+ "mcp"
45
+ ],
46
+ "env": {}
38
47
  }
39
48
  }
40
- }
49
+ }
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 `*_tool.rb` for actual service operations
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 `*_tool.rb` method calls
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
- ##### `*_tool.rb` - Core Service Functionality
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
- - Service-specific naming: `slack_tool.rb`, `gcal_tool.rb`, `gdrive_tool.rb`, `gmeet_tool.rb`
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
- # MCPEasy
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
- └── gmeet/ # Google Meet
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/gcal_tool"
11
- tool = GcalTool.new(skip_auth: true)
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 < GcalCLI
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 < GdriveCLI
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 < GmeetCLI
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 < SlackCLI
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
 
@@ -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
@@ -14,6 +14,7 @@ module Mcpeasy
14
14
  puts "Created #{Config::CONFIG_DIR}"
15
15
  puts "Created #{Config::GOOGLE_DIR}"
16
16
  puts "Created #{Config::SLACK_DIR}"
17
+ puts "Created #{Config::NOTION_DIR}"
17
18
  puts "Created #{Config::LOGS_DIR}"
18
19
 
19
20
  puts "mcpeasy setup complete!"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Mcpeasy
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
@@ -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
- ├── gcal_tool.rb # Google Calendar API wrapper
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 `GcalTool` class
211
- 2. **New CLI commands**: Add to `GcalCLI` class
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