Gmail MCP Server
Gmail MCP Server
Сервер Model Context Protocol (MCP), специально созданный для интеграции с Gmail, позволяющий AI-ассистентам просматривать непрочитанные письма и выполнять операции по управлению электронной почтой.
Возможности
Список непрочитанных писем: Получение непрочитанных писем из входящих Gmail с возможностью фильтрации по теме
Список всех писем: Получение всех писем из Gmail (по умолчанию — входящие, есть опция для всей почты)
Поиск писем: Поиск писем с использованием полного синтаксиса запросов Gmail (
from:,to:,subject:,has:attachment,after:,label:,is:starred)Содержимое писем: Доступ к полному содержимому письма, включая заголовки, тело и метаданные
Удаление писем: Безвозвратное удаление писем по ID
Архивация писем: Архивация писем (удаление из входящих) по ID
Веб-панель: Красивая адаптивная панель для интеллектуального управления входящими
Автосортировка: Автоматическая классификация и организация писем каждые 15 минут
Автоочистка: Интеллектуальное удаление тривиальных писем и архивация приглашений в календарь
Related MCP server: Gmail MCP Server
Установка
Клонируйте этот репозиторий:
git clone <repository-url>
cd gmail-mcp-serverНастройте учетные данные Google OAuth 2.0:
Перейдите в Google Cloud Console
Создайте новый проект или выберите существующий
Включите Gmail API
Создайте учетные данные OAuth 2.0 (приложение для настольных компьютеров)
Скачайте файл JSON с учетными данными и сохраните его как
credentials.jsonв корне проекта
Пройдите аутентификацию (см. Аутентификация ниже):
make authОтдельный шаг установки не требуется — make auth (и любая другая цель make, требующая зависимостей Python, например test, lint, dashboard) автоматически создает локальную .venv/ и устанавливает в нее проект при первом запуске. Вам никогда не нужно выполнять pip install в системном окружении (многие дистрибутивы поставляются с «внешне управляемым» системным Python, который в любом случае отказывается от прямого pip install).
Запустите сервер:
.venv/bin/python -m gmail_mcp_server.serverВеб-панель и управление входящими
Gmail MCP Server включает мощную веб-панель для интеллектуального управления входящими с автоматической сортировкой и организацией.
Быстрый старт
Запустите панель с помощью:
make dashboardИли вручную:
.venv/bin/python app.pyПанель будет доступна по адресу http://localhost:5000
Возможности панели
Автосортировка каждые 15 минут: Автоматически классифицирует и организует письма
Интеллектуальная организация: Группирует письма по приоритету (Критично → Важно → Информация)
Автоочистка: Автоматически удаляет тривиальные изменения полей и архивирует приглашения в календарь
Статистика в реальном времени: Просмотр общего количества писем, времени последней синхронизации и обратного отсчета до следующей
Быстрая навигация: Нажмите на группу писем, чтобы просмотреть результаты поиска Gmail
Адаптивный дизайн: Работает на настольных компьютерах, планшетах и мобильных устройствах
Ручное обновление: Немедленный запуск сортировки с помощью кнопки обновления
Использование с Claude Code
При использовании Claude Code вы можете задействовать этот Gmail MCP сервер для управления электронной почтой прямо из вашей среды разработки:
Сортировка входящих: Используйте команду
/triageдля автоматической организации и очистки входящихИнтеграция в рабочие процессы: Claude Code может помочь анализировать содержимое писем и предлагать действия
Автоматизированное управление: Настройте панель для работы в фоновом режиме и управления письмами, пока вы пишете код
Легкий доступ: Проверяйте организованные входящие, не покидая вашу IDE
Чтобы использовать с Claude Code:
Убедитесь, что MCP-сервер настроен в вашем
.mcp.jsonClaude Code получит доступ к инструментам Gmail для управления почтой
Используйте команды на естественном языке для управления письмами (например, «удалить эти спам-письма», «архивировать приглашения в календарь»)
См. DASHBOARD.md для полной документации по панели.
Конфигурация MCP
Чтобы использовать этот Gmail MCP сервер с Claude или gemini-cli, вам необходимо настроить файл .mcp.json. Этот файл сообщает AI-ассистенту, как подключиться к вашему MCP-серверу.
Конфигурация .mcp.json
Создайте файл .mcp.json в вашем домашнем каталоге или каталоге проекта со следующей конфигурацией:
{
"mcpServers": {
"gmail": {
"command": "/path/to/gmail-mcp-server/.venv/bin/python3",
"args": ["-m", "gmail_mcp_server.server"],
"cwd": "/path/to/gmail-mcp-server"
}
}
}Детали конфигурации:
command: Интерпретатор Python для использования. Укажите.venv/bin/python3(создается автоматически командойmake auth), чтобы сервер имел доступ к установленным зависимостям — обычныйpython/python3завершится с ошибкойModuleNotFoundError, если эти пакеты не установлены в системе.args: Аргументы для передачи модулю Gmail MCP сервераcwd: Рабочий каталог, в котором установлен Gmail MCP сервер
Для Claude Desktop:
Поместите файл .mcp.json в каталог конфигурации Claude Desktop:
macOS:
~/Library/Application Support/Claude/Windows:
%APPDATA%\Claude\Linux:
~/.config/claude/
Для gemini-cli:
Поместите файл .mcp.json в ваш домашний каталог или укажите путь при запуске gemini-cli.
Пример использования
После настройки вы можете использовать Gmail MCP сервер с AI-ассистентами, передав его в конфигурацию вашего клиента.
Безопасность PIN-кода панели
Панель может быть защищена 4-значным PIN-кодом. При настройке панель показывает экран ввода PIN-кода при каждой новой сессии (сессии длятся 4 часа).
Установка PIN-кода
make set-pin
# Enter new PIN: ****
# Confirm PIN: ****
# PIN saved.Или используйте Python CLI напрямую:
python3 app.py --set-pinЭто записывает хешированный PIN-код PBKDF2-SHA256 в .pincode в корне проекта. Исходный PIN-код никогда не хранится. И .pincode, и .flask_secret игнорируются git.
Чтобы удалить защиту PIN-кодом, удалите .pincode:
rm .pincodeЗапуск в Kubernetes
Все секреты объединены в одном Kubernetes Secret gmail-mcp-secrets (см. k8s/secret.yaml_example). При использовании защиты PIN-кодом включите предварительно хешированное значение .pincode туда, а не генерируйте его на диске.
1. Сгенерируйте хеш PIN-кода локально:
make set-pin # writes .pincode to repo root
cat .pincode # copy the "salt:hash" stringИли сгенерируйте его напрямую:
python3 -c "
import secrets, hashlib
pin = '1234' # replace with your PIN
salt = secrets.token_hex(16)
h = hashlib.pbkdf2_hmac('sha256', pin.encode(), salt.encode(), 260000).hex()
print(f'{salt}:{h}')
"2. Добавьте его в ваш k8s/secret.yaml (вместе с другими секретами):
stringData:
.pincode: "salt:hash-from-above"
FLASK_SECRET_KEY: "$(python3 -c 'import secrets; print(secrets.token_hex(32))')"
# ... other fields from k8s/secret.yaml_example3. Примените и разверните:
kubectl apply -f k8s/secret.yaml
kubectl apply -f k8s/deployment.yamlТочка входа копирует .pincode из монтирования только для чтения /secrets/ в /app/ при запуске. FLASK_SECRET_KEY внедряется как переменная окружения для поддержания стабильных сессий при перезапусках подов.
Команды Make
Используйте прилагаемый Makefile для быстрого доступа к распространенным задачам:
# Display available commands
make help
# Initialize Gmail OAuth authentication (requires credentials.json)
make auth
# Set or change the dashboard PIN
make set-pin
# Start the web dashboard
make dashboard
# Stop the running dashboard
make kill-dashboard
# Run inbox triage once (email classification and organization)
make triage
# Watch inbox every 10 minutes (runs triage repeatedly)
make watchВы можете указать, какую модель Claude использовать, с помощью переменной MODEL:
make triage MODEL=haiku # Fast triage with Haiku (default)
make triage MODEL=sonnet # Balanced triage with Sonnet
make triage MODEL=opus # Most capable triage with Opus
make watch MODEL=opusДоступные инструменты
1. list_unread_emails
Выводит список непрочитанных писем во входящих Gmail с возможностью фильтрации. Перестраивает карту позиций в памяти, используемую инструментами удаления/архивации/изменения.
Параметры:
subject_filter(необязательный): Фильтр писем по тексту темыmax_results(необязательный): Максимальное количество писем для возврата (по умолчанию: 50)
2. list_all_emails
Выводит список писем в Gmail (по умолчанию — входящие, включая прочитанные и непрочитанные сообщения). Перестраивает карту позиций в памяти.
Параметры:
inbox_only(необязательный): Указывает, выводить ли только письма, находящиеся во входящих (по умолчанию:true). Установитеfalse, чтобы вывести все письма во всех папках.max_results(необязательный): Максимальное количество писем для возврата (по умолчанию: 50)
3. search_emails
Выполняет поиск писем с использованием стандартного синтаксиса поисковых запросов Gmail. Перестраивает карту позиций в памяти.
Параметры:
query(обязательный): Строка поискового запроса Gmail (например,from:user@example.com,has:attachment,subject:report,after:2024/01/01,is:starred,label:work)max_results(необязательный): Максимальное количество писем для возврата (по умолчанию: 50)
4. delete_emails
Перемещает письма в корзину и помечает их как прочитанные. Принимает номера позиций из последнего вызова списка/поиска писем и/или явные идентификаторы сообщений Gmail.
Параметры:
positions(необязательный): Массив номеров позиций (начиная с 1) из списка писемmessage_ids(необязательный): Массив идентификаторов сообщений Gmail
5. archive_emails
Архивирует письма (удаляет из входящих) и помечает их как прочитанные.
Параметры:
positions(необязательный): Массив номеров позиций (начиная с 1)message_ids(необязательный): Массив идентификаторов сообщений Gmail
6. list_labels
Возвращает все метки Gmail (системные + пользовательские).
Параметры: Нет
7. create_label
Создает новую метку Gmail с возможностью указания цвета.
Параметры:
name(обязательный): Имя метки (например,Triage/Security)background_color(необязательный): Шестнадцатеричный цвет (например,#4a86e8) — должен быть предопределенным цветом Gmailtext_color(необязательный): Шестнадцатеричный цвет текста — должен использоваться вместе сbackground_color
8. modify_labels
Добавляет и/или удаляет метки на письмах. При добавлении метки Triage/* все остальные метки Triage/* на письме автоматически удаляются (инвариант: одна метка на письмо).
Параметры:
positions(необязательный): Массив номеров позиций (начиная с 1)message_ids(необязательный): Массив идентификаторов сообщений Gmailadd_labels(необязательный): Массив имен меток для добавленияremove_labels(необязательный): Массив имен меток для удаления
9. list_recent_actions
Возвращает журнал последних операций с письмами в памяти (максимум 100).
Параметры:
limit(необязательный): Максимальное количество действий для возврата (по умолчанию: 10)
Аутентификация
Первоначальная настройка
При первом запуске сервер требует аутентификации. Используйте предоставленный помощник аутентификации:
make authЭто автоматически создает .venv (если он еще не существует) и устанавливает зависимости в него
перед запуском процесса аутентификации, поэтому ручной шаг pip install не требуется.
Или вручную, используя виртуальное окружение проекта:
.venv/bin/python -m gmail_mcp_server.authЭто:
Проверит, что
credentials.jsonсуществует в корне проектаОткроет окно браузера для аутентификации OAuth 2.0
Запросит разрешение на доступ к вашему аккаунту Gmail
Сохранит токен аутентификации в
token.jsonдля дальнейшего использования
Получение учетных данных
Перед запуском make auth вам необходимо настроить учетные данные Google OAuth 2.0:
Перейдите в Google Cloud Console
Создайте новый проект или выберите существующий
Включите Gmail API
Создайте учетные данные OAuth 2.0 (приложение для настольных компьютеров)
Скачайте файл JSON с учетными данными и сохраните его как
credentials.jsonв корне проекта
Как это работает
Сервер проверяет наличие существующего токена аутентификации (
token.json) при запускеЕсли токен существует и действителен, сервер использует его автоматически
Если токен истек, но есть токен обновления, он обновляется автоматически
Если токена нет, сервер запросит аутентификацию с помощью команды
make auth
Требуемые области Gmail API
https://www.googleapis.com/auth/gmail.readonly— чтение писемhttps://www.googleapis.com/auth/gmail.modify— удаление и архивация писем
Замечания по безопасности
Храните файлы
credentials.jsonиtoken.jsonв безопасностиЭти файлы автоматически игнорируются git
Сервер запрашивает только минимально необходимые разрешения
Все операции выполняются через официальный Gmail API
Разработка
make test, make lint, make format и make auth автоматически создают .venv/ (с dev-зависимостями) при первом запуске, поэтому отдельный шаг настройки не требуется.
Запуск тестов:
make test # run all tests
make test-cov # run with coverage reportЛинтинг и форматирование:
make lint # check with ruff
make format # auto-format and fix imports with ruffЗапуск MCP-сервера напрямую:
.venv/bin/python -m gmail_mcp_server # short form (via __main__.py)
.venv/bin/python -m gmail_mcp_server.server # explicit
.venv/bin/gmail-mcp-server # installed entry pointИнтерактивное тестирование сервера с помощью MCP Inspector:
npx @modelcontextprotocol/inspector .venv/bin/python3 -m gmail_mcp_server.serverAvailable Tools
7 toolsarchive_emailsA
Archive emails (remove from inbox). Accepts positions[] from email list and/or message_ids[].
| Name | Required | Description | Default |
|---|---|---|---|
| positions | No | Position numbers from the email list | |
| message_ids | No | Gmail message IDs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It states the tool removes emails from inbox but does not disclose whether the action is reversible, permission requirements, or potential side effects (e.g., label changes). For a mutation tool, this is insufficient transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that front-loads the action and then concisely lists the accepted inputs. No extraneous words or repetitions; every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two fully described parameters and no output schema, the description covers the essential purpose and input relationship. It could be enhanced by mentioning the return value (e.g., success status or count), but the current level is adequate for most use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters, but the description adds value by noting positions come from an email list (linking to sibling tool list_unread_emails) and that positions and message_ids are alternatives. This contextual information enhances the schema's basic definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (archive emails) and the resource (remove from inbox), and it distinguishes from siblings like delete_emails by specifying it only removes from inbox. It also explicitly mentions the two input methods, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for moving emails out of inbox but does not explicitly state when to use this tool vs alternatives like delete_emails or modify_labels. No exclusions or prerequisites are provided, leaving the agent to infer usage context from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_labelC
Create a new Gmail label
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The label name to create | |
| text_color | No | Hex text color (e.g. '#ffffff'). Must be used with background_color. Only predefined Gmail colors are accepted. | |
| background_color | No | Hex background color (e.g. '#4a86e8'). Must be used with text_color. Only predefined Gmail colors are accepted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full responsibility for behavioral disclosure. It merely states the action without revealing what happens upon success or failure (e.g., duplicate label behavior, color validation, return value). This is a significant gap for a creation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the key action. It could be slightly expanded with usage hints without losing conciseness, but it is not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema and annotations, the description should provide more context about the tool's behavior, such as whether it returns the created label, any side effects, or error conditions. The current text is insufficient for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% description coverage for all three parameters, so the description adds minimal value beyond the schema. It correctly implies that 'name' is the label name, but does not elaborate on color constraints or usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Create' and the resource 'Gmail label', making the tool's purpose straightforward. However, it does not explicitly distinguish it from sibling tools like 'modify_labels' or 'list_labels', though the name itself provides some differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. For example, it does not mention that 'modify_labels' could be used to update existing labels, nor does it specify prerequisites or context for creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_emailsA
Move emails to trash and mark as read. Accepts positions[] from email list and/or message_ids[].
| Name | Required | Description | Default |
|---|---|---|---|
| positions | No | Position numbers from the email list | |
| message_ids | No | Gmail message IDs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden of behavioral disclosure. It states the tool moves emails to trash and marks them as read, which are key effects. However, it does not mention whether the action is reversible (e.g., Gmail trash recovery) or any side effects like batch limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short, front-loaded sentences with no unnecessary words. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (delete), and the description covers the core action and parameters. However, it lacks details about return behavior, error handling, or batch limitations, which would be helpful given no output schema or annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already describes both parameters. The description adds value by clarifying that positions[] and message_ids[] can be used 'and/or' together, indicating they are alternative or complementary ways to specify emails.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Move emails to trash and mark as read,' specifying the verb (move/trash, mark) and resource (emails). It distinguishes from sibling tools like archive_emails (which archives rather than trashes) and list_unread_emails (which lists).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to delete emails but does not explicitly state when to use this tool versus alternatives like archive_emails or modify_labels. No when-not-to-use or prerequisite guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_labelsB
List all Gmail labels
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It only states 'List all Gmail labels', but does not confirm it is read-only, describe output format, or mention any rate limits or permissions. For a zero-annotation tool, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded and contains no unnecessary words. It is concise and to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, no annotations, and zero parameters, the description is adequate for a simple list operation. However, it does not provide any context about pagination, result format, or relationship to sibling tools like create_label. It is minimally complete but not enriching.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so schema coverage is 100% trivially. The description adds no additional meaning beyond the schema. Baseline for 0 params is 4, but the description is minimal and does not enrich the agent's understanding of the tool's behavior or output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all Gmail labels, which is a specific verb+resource. It distinguishes from siblings like list_unread_emails (lists emails) and list_recent_actions (actions, not labels). However, it does not explicitly differentiate from create_label or modify_labels, which operate on labels but are different actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. For example, before creating a label with create_label, an agent might need to list existing labels to avoid duplicates, but this is not mentioned. No exclusions or context cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recent_actionsB
Show recent actions taken on emails (delete, archive, label changes, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of recent actions to show (default: 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states the tool shows recent actions, but does not disclose behavioral traits like authentication requirements, action types scope, time range, sorting, or any side effects. Significant lack of transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the verb and resource. No filler words; every part serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one parameter and no output schema, the description is adequate but not fully complete. It mentions action types, but lacks details on output format, sorting, time range, or pagination. Leaves some ambiguity for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter 'limit' having a default and description. The description adds no additional meaning beyond what the schema provides. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('show') and the resource ('recent actions on emails'), with specific examples (delete, archive, label changes). This distinguishes it from sibling tools like list_unread_emails (which shows emails, not actions) and delete/archive tools (which perform actions).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs. alternatives. It does not mention when not to use it or provide any conditions. The context from sibling tools only implicitly implies viewing, but no clear usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_unread_emailsA
List unread emails in Gmail inbox with optional subject filtering
| Name | Required | Description | Default |
|---|---|---|---|
| max_results | No | Maximum number of emails to return (default: 50) | |
| subject_filter | No | Optional filter to search for emails with specific subject content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the burden of disclosing behavior. It indicates a read operation but does not explicitly state it is read-only, nor does it mention pagination, rate limits, or other behavioral traits. Basic transparency is achieved but gaps remain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with key information, no wasted words. Perfectly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description should at least hint at what is returned (e.g., email metadata). It fails to mention return format, fields, or behavior on empty results. For a list tool, this is a significant gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds no additional meaning beyond what the schema already provides for each parameter. The mention of 'subject filtering' is redundant with the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and the resource 'unread emails in Gmail inbox' with an optional filter. It distinguishes itself from sibling tools like delete_emails and archive_emails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing unread emails but does not explicitly state when to use this tool versus alternatives (e.g., when to use list_unread_emails vs list_recent_actions). No when-not guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_labelsA
Batch add/remove labels on emails. Accepts positions[] and/or message_ids[], plus add_labels[] and/or remove_labels[] (label names). When adding a Triage/* label, all other Triage/* labels on the email are automatically removed.
| Name | Required | Description | Default |
|---|---|---|---|
| positions | No | Position numbers from the email list | |
| add_labels | No | Label names to add | |
| message_ids | No | Gmail message IDs | |
| remove_labels | No | Label names to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behavioral traits: batch operation, parameter flexibility, and the automatic removal of other Triage/* labels when adding one. However, it does not mention idempotency, error conditions, or side effects beyond labeling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences) and front-loaded with the main action. Every sentence adds value: first defines the operation, second specifies parameter usage and a critical behavioral rule.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (4 parameters, no output schema), the description covers the core operation and a notable edge case. It does not explain return values or error handling, but for a label mutation tool, the behavioral details are adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the description adds value by clarifying that positions[] and message_ids[] are alternative identifiers, and add_labels/remove_labels refer to label names. It also introduces the Triage/* auto-removal logic, which is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: batch add/remove labels on emails. It specifies the action (modify labels), resource (emails), and unique behavior (Triage/* auto-removal), distinguishing it from sibling tools like list_labels (read-only) and create_label (single label creation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for batch label operations but lacks explicit when-to-use or when-not-to-use guidance. It does not mention alternatives or prerequisites, though the Triage/* rule provides a specific conditional guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool serves a unique function: listing unread emails, deleting, archiving, managing labels, and viewing recent actions. No two tools have overlapping purposes; even delete_emails and archive_emails are clearly distinguished by their actions.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., list_unread_emails, create_label, modify_labels). The naming is predictable and makes the action-resource relationship clear.
With 7 tools, the server is well-scoped for basic Gmail inbox management and label operations. Each tool addresses a necessary operation without redundancy or unnecessary complexity.
The tool set covers core inbox operations (list, delete, archive) and label management (list, create, modify), but lacks essential features like sending emails, reading full email content, searching beyond unread, or marking read/unread. Gaps exist for a full email workflow.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Manage Gmail end-to-end: search, read, send, draft, label, and organize threads. Automate workflow…
Connect any mailbox to Claude, ChatGPT & AI: read, send, reply, schedule & search emails.
Manage Gmail messages, threads, labels, drafts, and settings from your workflows. Send and organiz…
Stateful email for AI agents — read inboxes, reply in-thread, draft with approval.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Gmail by reading unread emails with automatic classification, creating AI-generated draft replies, and saving drafts directly to Gmail through the Gmail API.215MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Gmail accounts for reading unread emails, creating draft replies with proper threading, and managing messages, with optional professional writing guidelines, templates, and Google Docs/Calendar integration.
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Gmail through natural language interactions, including sending, reading, searching emails, and managing labels with auto authentication support.20,6271MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Gmail through natural language, including sending, reading, searching, labeling emails, managing attachments, and performing thread operations.3MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jnpacker/gmail-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server