Hermes1.0 — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Hermes1.0 (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<div align="center">
<br/>
<img src="https://img.shields.io/badge/HERMES-1.0-f0a05c?style=for-the-badge&labelColor=0a0a0f&color=f0a05c" alt="Hermes 1.0"/>
<br/><br/>
An intelligent developer productivity platform powered by AI.<br/> Manage email, analyse GitHub repositories, and tailor resumes — all from a single local server.
<br/>
<br/>
</div>
Hermes is a dual-interface AI productivity server that runs entirely on your local machine. It exposes five AI-powered tools through two interfaces simultaneously — a Model Context Protocol (MCP) server for Claude Desktop, and a Flask HTTP API backing a built-in web UI.
The server is powered by Groq (llama-3.3-70b-versatile) for all AI tasks, with Waitress (Windows) or Gunicorn (Linux/macOS) as the production WSGI layer — auto-selected at runtime with zero configuration.
No data leaves your machine except for API calls to Gmail, GitHub, Groq, and arXiv/HuggingFace/PapersWithCode.
| Module | Description |
|---|---|
| Inbox Sorter | Fetches Gmail and classifies every message by priority — critical, high, medium, or low — using AI analysis of subject, sender, and content. |
| Email Composer | Generates professional emails via Groq with configurable tone. Supports one-click send via Gmail API. |
| AI/ML Search | Deep research across arXiv, HuggingFace, and PapersWithCode. Returns ranked papers, models, and structured insights. |
| GitHub Analyzer | Full portfolio analysis across 8 actions: repo overview, commit activity, README quality scoring, stale repo detection, AI code review, tech stack mapping, and dependency auditing. |
| Resume Tailor | Two-phase AI tailoring — JD analysis followed by resume rewriting with match scoring, gap analysis, and interview tips. |
Hermes Architecture
Full data flow from Claude Desktop and Browser UI through the MCP/HTTP layers, tools, services, and external APIs.
hermes/
├── main.py # Flask app + MCP server (WSGI entry point)
├── serve.py # Smart launcher — auto-detects OS and WSGI server
├── gunicorn.conf.py # Gunicorn configuration (Linux/macOS)
├── logger.py # Structured logging
├── check_groq.py # API key diagnostic utility
│
├── tools/
│ ├── mail_fetcher.py # Gmail fetch + Groq classification
│ ├── mail_writer.py # Email generation + Gmail send
│ ├── ai_search.py # Multi-source AI/ML research
│ ├── github_analyzer.py # GitHub analysis — 8 actions
│ └── resume_tailor.py # Two-phase resume tailoring
│
├── services/
│ ├── claude_service.py # Groq client + shared AI helpers
│ ├── gmail_service.py # Gmail OAuth 2.0 + API wrapper
│ └── github_service.py # PyGithub wrapper — 8 analysis functions
│
├── ui/
│ └── index.html # Single-file dark UI — no build step required
│
├── tests/
│ ├── test_imports.py # Module import smoke tests
│ ├── test_flask_routes.py # HTTP endpoint tests (mocked)
│ ├── test_github_analyzer.py # GitHub tool unit tests
│ └── test_resume_tailor.py # Resume tailor unit tests
│
├── .github/
│ └── workflows/
│ └── ci.yml # CI pipeline — lint, imports, unit tests
│
├── .env # Local secrets — never committed
├── .env.example # Environment variable template
└── requirements.txtcredentials.json from Google Cloud Console)repo scopegit clone https://github.com/rayyan666/MAIL-MCP.git hermes
cd hermes
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # Linux / macOS
pip install -r requirements.txtcp .env.example .envEdit .env:
GROQ_API_KEY=gsk_your_key_here
GH_TOKEN=ghp_your_token_herePlace credentials.json (Gmail OAuth) in the project root.
python check_groq.pypython serve.pyOpen [http://localhost:5000](http://localhost:5000) in your browser.
Note: Run from a plain terminal window rather than the VS Code integrated terminal to ensure.envvariables load correctly viapython-dotenv.
| Command | Description |
|---|---|
python serve.py | Production HTTP server — Waitress on Windows, Gunicorn on Linux |
python serve.py --mcp | MCP stdio mode for Claude Desktop with HTTP server running in background |
python serve.py --dev | Flask development server with debug mode enabled |
PORT=8080 python serve.py | Run on a custom port |
To use Hermes as an MCP server with Claude Desktop, add the following to %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"hermes": {
"command": "C:\\path\\to\\hermes\\venv\\Scripts\\python.exe",
"args": ["C:\\path\\to\\hermes\\serve.py", "--mcp"],
"env": {
"GROQ_API_KEY": "gsk_your_key",
"GH_TOKEN": "ghp_your_token"
}
}
}
}Restart Claude Desktop. The following tools will be available: get_emails, compose_email, search_ai_ml, github_analyzer, tailor_resume_tool.
All endpoints are available at http://localhost:5000 and accept/return JSON.
GET /health{ "status": "ok", "server": "waitress" }POST /tools/get_emails{ "max_results": 10, "filter_priority": "all" }POST /tools/compose_email{
"to": "[email protected]",
"purpose": "Project status update",
"key_points": ["Milestone completed", "Next steps"],
"tone": "professional",
"auto_send": false
}POST /tools/search_ai_ml{ "query": "LoRA fine-tuning efficiency", "depth": "advanced", "max_results": 10 }POST /tools/analyze_github{ "action": "repo_overview", "ai_summary": true }{ "action": "review_code", "repo": "hermes", "file_path": "main.py" }Available actions: list_repos · repo_overview · commit_activity · readme_quality · stale_repos · review_code · tech_stack · audit_dependencies
POST /tools/tailor_resume{
"role": "Senior ML Engineer",
"company": "Google DeepMind",
"job_description": "...",
"existing_resume": "...",
"mode": "full"
}Available modes: full · quick · batch
| Variable | Required | Description |
|---|---|---|
GROQ_API_KEY | ✅ | Groq API key — obtain from console.groq.com |
GH_TOKEN | ✅ | GitHub Personal Access Token with repo scope |
GMAIL_CREDENTIALS | ✅ | Path to credentials.json — defaults to project root |
PORT | ❌ | HTTP server port — defaults to 5000 |
GUNICORN_RELOAD | ❌ | Set to true to enable Gunicorn auto-reload on Linux |
Important: UseGH_TOKENrather thanGITHUB_TOKEN. TheGITHUB_prefix is reserved by GitHub Actions and cannot be used as a custom secret name.
# Run full test suite
venv\Scripts\python -m pytest tests/ -v
# Run with coverage report
venv\Scripts\python -m pytest tests/ -v --cov=tools --cov=services --cov-report=term-missing
# Lint
venv\Scripts\python -m flake8 tools/ services/ main.py serve.py --max-line-length=130
# Diagnose API key issues
python check_groq.py`ModuleNotFoundError: No module named 'fcntl'` Gunicorn does not support Windows. Use python serve.py or waitress-serve --port=5000 main:app instead.
Groq 401 Invalid API Key The key is expired or revoked. Run python check_groq.py for a full diagnosis. Obtain a replacement key from console.groq.com/keys. Note that VS Code may cache stale .env values — running from a plain terminal window resolves this.
UI renders as raw CSS text Perform a hard refresh with Ctrl+Shift+R. If the issue persists, confirm Flask is using send_from_directory(os.path.join(BASE_DIR, "ui"), "index.html") in main.py.
MCP tools not appearing in Claude Desktop Verify that serve.py --mcp is specified in claude_desktop_config.json. Ensure all paths use double backslashes on Windows. Restart Claude Desktop after any configuration change.
VS Code terminal not loading `.env` Add "python.terminal.useEnvFile": true to VS Code User Settings (JSON), or run from a plain cmd window outside VS Code.
This project is licensed under the MIT License. See LICENSE for details.
<div align="center">
Built by rayyan666 · Powered by Groq llama-3.3-70b · Served by Waitress / Gunicorn · MCP via FastMCP
</div>
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.