@aot-tech/gmail-mcp-server
v1.0.3
Published
Gmail MCP Server with Bearer Token Authentication - A Model Context Protocol server for Gmail access
Readme
JIRA MCP Server
A Model Context Protocol (MCP) server implementation that provides access to JIRA data with relationship tracking, optimized data payloads, and data cleaning for AI context windows.
ℹ️ There is a separate MCP server for Confluence
Jira Cloud & Jira Server (Data Center) Support
This MCP server supports both Jira Cloud and Jira Server (Data Center) instances. You can select which type to use by setting the JIRA_TYPE environment variable:
cloud(default): For Jira Cloud (Atlassian-hosted)server: For Jira Server/Data Center (self-hosted)
The server will automatically use the correct API version and authentication method for the selected type.
Features
- Search JIRA issues using JQL (maximum 50 results per request)
- Retrieve epic children with comment history and optimized payloads (maximum 100 issues per request)
- Get detailed issue information including comments and related issues
- Create, update, and manage JIRA issues
- Add comments to issues
- Extract issue mentions from Atlassian Document Format
- Track issue relationships (mentions, links, parent/child, epics)
- Clean and transform rich JIRA content for AI context efficiency
- Support for file attachments with secure multipart upload handling
- Supports both Jira Cloud and Jira Server (Data Center) APIs
Prerequisites
- Bun (v1.0.0 or higher)
- JIRA account with API access
Environment Variables
JIRA_API_TOKEN=your_api_token
JIRA_BASE_URL=your_jira_instance_url # e.g., https://your-domain.atlassian.net
JIRA_USER_EMAIL=your_email
JIRA_TYPE=cloud # or 'server' for Jira Server/Data Center (optional, defaults to 'cloud')Installation & Setup
1. Clone the repository:
git clone [repository-url]
cd jira-mcp2. Install dependencies and build:
bun install
bun run build3. Configure the MCP server:
Edit the appropriate configuration file:
macOS:
- Cline:
~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json - Claude Desktop:
~/Library/Application Support/Claude/claude_desktop_config.json
Windows:
- Cline:
%APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json - Claude Desktop:
%APPDATA%\Claude Desktop\claude_desktop_config.json
Linux:
- Cline:
~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json - Claude Desktop: sadly doesn't exist yet
Add the following configuration under the mcpServers object:
{
"mcpServers": {
"jira": {
"command": "node",
"args": ["/absolute/path/to/jira-mcp/build/index.js"],
"env": {
"JIRA_API_TOKEN": "your_api_token",
"JIRA_BASE_URL": "your_jira_instance_url",
"JIRA_USER_EMAIL": "your_email",
"JIRA_TYPE": "cloud"
}
}
}
}4. Restart the MCP server.
Within Cline's MCP settings, restart the MCP server. Restart Claude Desktop to load the new MCP server.
Development
Run tests:
bun testWatch mode for development:
bun run devTo rebuild after changes:
bun run buildProject Structure (Updated)
The server has been restructured to follow best practices with organized tool modules:
src/
├── index.ts # Main server entry point
├── config.ts # Configuration management
├── types/
│ └── index.ts # TypeScript type definitions
├── utils/
│ └── auth.ts # Authentication utilities
├── tools/ # MCP tools organized by category
│ ├── issues.ts # Issue management tools
│ ├── projects.ts # Project management tools
│ ├── users.ts # User management tools
│ ├── metadata.ts # Metadata tools (types, priorities, statuses)
│ ├── boards.ts # Agile/board management tools
│ └── resources.ts # Resource management tools
├── services/
│ ├── jira-api.ts # JIRA Cloud API service
│ └── jira-server-api.ts # JIRA Server API service
└── validation/ # Zod validation schemas
├── issues/
├── projects/
└── users/Available MCP Tools
search_issues
Search JIRA issues using JQL. Returns up to 50 results per request.
Input Schema:
{
searchString: string; // JQL search string
}get_epic_children
Get all child issues in an epic including their comments and relationship data. Limited to 100 issues per request.
Input Schema:
{
epicKey: string; // The key of the epic issue
}get_issue
Get detailed information about a specific JIRA issue including comments and all relationships.
Input Schema:
{
issueId: string; // The ID or key of the JIRA issue
}create_issue
Create a new JIRA issue with specified fields.
Input Schema:
{
projectKey: string, // The project key where the issue will be created
issueType: string, // The type of issue (e.g., "Bug", "Story", "Task")
summary: string, // The issue summary/title
description?: string, // Optional issue description
fields?: { // Optional additional fields
[key: string]: any
}
}update_issue
Update fields of an existing JIRA issue.
Input Schema:
{
issueKey: string, // The key of the issue to update
fields: { // Fields to update
[key: string]: any
}
}add_attachment
Add a file attachment to a JIRA issue.
Input Schema:
{
issueKey: string, // The key of the issue
fileContent: string, // Base64 encoded file content
filename: string // Name of the file to be attached
}add_comment
Add a comment to a JIRA issue. Accepts plain text and converts it to the required Atlassian Document Format internally.
Input Schema:
{
issueIdOrKey: string, // The ID or key of the issue to add the comment to
body: string // The content of the comment (plain text)
}Data Cleaning Features
- Extracts text from Atlassian Document Format
- Tracks issue mentions in descriptions and comments
- Maintains formal issue links with relationship types
- Preserves parent/child relationships
- Tracks epic associations
- Includes comment history with author information
- Removes unnecessary metadata from responses
- Recursively processes content nodes for mentions
- Deduplicates issue mentions
Technical Details
- Built with TypeScript in strict mode
- Uses Bun runtime for improved performance
- Vite for optimized builds
- Uses JIRA REST API v3
- Basic authentication with API tokens
- Batched API requests for related data
- Optimized response payloads for AI context windows
- Efficient transformation of complex Atlassian structures
- Robust error handling
- Rate limiting considerations
- Maximum limits:
- Search results: 50 issues per request
- Epic children: 100 issues per request
- Support for multipart form data for secure file attachments
- Automatic content type detection and validation
Error Handling
The server implements a comprehensive error handling strategy:
- Network error detection and appropriate messaging
- HTTP status code handling (especially 404 for issues)
- Detailed error messages with status codes
- Error details logging to console
- Input validation for all parameters
- Safe error propagation through MCP protocol
- Specialized handling for common JIRA API errors
- Base64 validation for attachments
- Multipart request failure handling
- Rate limit detection
- Attachment parameter validation
LICENCE
This project is licensed under the MIT License - see the LICENCE file for details.
Gmail MCP Server
A Model Context Protocol (MCP) server implementation that provides access to Gmail functionality using Bearer token authentication.
Features
- Send emails - Send emails via Gmail with support for TO, CC, BCC recipients
- Search emails - Search emails using Gmail's powerful search syntax
- Read emails - Retrieve and read email content by message ID
- Delete emails - Delete emails by message ID
- List labels - Get all available Gmail labels
- Bearer token authentication - Secure authentication using Gmail app passwords
Prerequisites
- Node.js (v18 or higher)
- Gmail account with app password enabled
- MCP client (Claude Desktop, Cline, etc.)
Authentication Setup
This server uses Gmail app passwords for authentication. Here's how to set it up:
- Go to your Google Account settings (myaccount.google.com)
- Enable 2-factor authentication if not already enabled
- Go to Security > App passwords
- Generate a new app password for 'Mail'
- Configure your MCP client to send Bearer token as:
[email protected]:your_16_character_app_password
Installation
From npm
npm install -g gmail-bearer-mcp-serverFrom source
git clone [repository-url]
cd email
npm install
npm run buildConfiguration
For MCP Clients
Edit your MCP client configuration file:
macOS:
- Cline:
~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json - Claude Desktop:
~/Library/Application Support/Claude/claude_desktop_config.json
Windows:
- Cline:
%APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json - Claude Desktop:
%APPDATA%\Claude Desktop\claude_desktop_config.json
Linux:
- Cline:
~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
Add the following configuration:
{
"mcpServers": {
"gmail": {
"command": "gmail-bearer-mcp",
"env": {
"GMAIL_BEARER_TOKEN": "[email protected]:your_app_password"
}
}
}
}Alternatively, you can provide the bearer token via headers:
Authorization: Bearer [email protected]:your_app_passwordX-Gmail-Token: [email protected]:your_app_password
Available Tools
send_email
Send an email via Gmail.
Parameters:
to(required): Array of recipient email addressessubject(required): Email subject linebody(required): Email body content (plain text)cc(optional): Array of CC email addressesbcc(optional): Array of BCC email addresses
Example:
{
"to": ["[email protected]"],
"subject": "Test Email",
"body": "This is a test email from the Gmail MCP server.",
"cc": ["[email protected]"],
"bcc": ["[email protected]"]
}search_emails
Search emails using Gmail's search syntax.
Parameters:
query(required): Gmail search querymaxResults(optional): Maximum number of results (1-500, default: 10)
Example queries:
from:[email protected]- Emails from specific senderhas:attachment- Emails with attachmentsafter:2024/01/01- Emails after specific datesubject:important- Emails with "important" in subject
read_email
Read the content of a specific email.
Parameters:
messageId(required): Gmail message ID
delete_email
Delete an email by message ID.
Parameters:
messageId(required): Gmail message ID to delete
list_labels
List all available Gmail labels.
Parameters: None
Development
Build
npm run buildDevelopment mode
npm run devStart
npm startSecurity
- This server uses Gmail app passwords for authentication
- Bearer tokens are extracted from request headers
- No credentials are stored in the server
- All communication uses HTTPS via Gmail's API
Troubleshooting
Authentication Issues
"No bearer token available" - Make sure you're providing the bearer token in one of these ways:
Authorization: Bearer your_email:your_app_passwordheaderX-Gmail-Token: your_email:your_app_passwordheaderGMAIL_BEARER_TOKEN=your_email:your_app_passwordenvironment variable
"Gmail API request failed: 401" - Your app password may be incorrect or expired. Generate a new one.
"Gmail API request failed: 403" - Your Gmail account may have restrictions. Check your Google Account security settings.
Common Issues
- Make sure 2-factor authentication is enabled on your Google account
- App passwords only work with 2FA enabled
- Use the full email address followed by colon and the 16-character app password
- Remove any spaces from the app password
License
MIT
