Co-authored-by: ArthurDanjou <29738535+ArthurDanjou@users.noreply.github.com>
ArtMCP - Arthur Danjou's MCP Server
A comprehensive Model Context Protocol (MCP) server exposing professional profile information about Arthur Danjou. Built with Nuxt and deployed on NuxtHub at the Edge.
🔗 Live Server: https://api.arthurdanjou.fr/mcp 📚 Documentation: https://api.arthurdanjou.fr/docs
📋 Table of Contents
- What is ArtMCP?
- Features
- Architecture
- Getting Started
- API Endpoints
- MCP Integration
- Development
- Content Structure
- Technologies
- Contributing
- License
- About
💡 What is ArtMCP?
ArtMCP is a Model Context Protocol (MCP) server that provides AI assistants and applications with structured, real-time access to professional information about Arthur Danjou. Instead of manually updating information across multiple platforms, this server acts as a single source of truth that can be queried by AI assistants, chatbots, or any application supporting MCP.
Use Cases:
- 🤖 Enable AI assistants to answer questions about Arthur's experience and skills
- 📄 Automatically generate customized resumes and cover letters
- 📊 Display real-time coding statistics and activity status
- 🔍 Query specific information (projects, education, contact details) programmatically
- 🌐 Integrate professional data into portfolios, websites, or applications
🎯 Features
MCP Resources
The server exposes the following resources through the Model Context Protocol:
- 📊 Skills (
resource://artmcp/skills) - Complete list of technical skills (programming languages, frameworks, tools) - 💼 Experiences (
resource://artmcp/experiences) - Professional work experience and projects - 🚀 Projects (
resource://artmcp/projects) - Portfolio of personal and professional projects - 🎓 Education (
resource://artmcp/education) - Academic background and degrees - 🌐 Languages (
resource://artmcp/languages) - Spoken languages with proficiency levels - 👤 Profile (
resource://artmcp/profile) - Comprehensive profile with bio, location, availability, career goals, and work preferences - 🎨 Hobbies (
resource://artmcp/hobbies) - Personal interests and activities - 📞 Contact (
resource://artmcp/contact) - Professional contact information and social links - 🛠️ Uses (
resource://artmcp/uses) - Tools, hardware, and software setup
MCP Tools
activity- Real-time current activity and status of Arthur Danjouresume-link- Get download link for resume in English or Frenchstats- Detailed coding statistics and analytics from WakaTimestatus-page- Real-time status and uptime monitoring for homelab infrastructureuses-by-category- Filter uses by category (homelab, ide, hardware, software)weather- Get current weather for a city
MCP Prompts
Pre-configured prompts for common queries about:
- Resume generation
- Skills and expertise
- Projects showcase
- Real-time activity
- Contact information
- And more...
🏗️ Architecture
This project uses:
- Nuxt 4 with Nitro for server-side rendering
- @nuxt/content for content management
- @nuxtjs/mcp-toolkit for MCP server implementation
- NuxtHub for edge deployment on Cloudflare Workers
- nuxt-studio for content management studio
- Zod for schema validation
🚀 Getting Started
Prerequisites
- Node.js 18+ or Bun runtime
- pnpm 10.12.1+ (package manager)
Installation
# Clone the repository
git clone https://github.com/ArthurDanjou/artapi.git
cd artapi
# Install dependencies
pnpm install
Environment Variables
Create a .env file (optional):
# Discord integration (optional)
NUXT_DISCORD_USER_ID=""
NUXT_DISCORD_ID=""
NUXT_DISCORD_TOKEN=""
# Wakatime integration (optional)
NUXT_WAKATIME_USER_ID=""
NUXT_WAKATIME_CODING=""
NUXT_WAKATIME_EDITORS=""
NUXT_WAKATIME_LANGUAGES=""
NUXT_WAKATIME_OS=""
# Status page (optional)
NUXT_STATUS_PAGE=""
Development
Start the development server on http://localhost:3000:
pnpm dev
The server will be available at:
- 🌐 Web Interface:
http://localhost:3000 - 📚 Documentation:
http://localhost:3000/docs - 🔌 MCP Endpoint:
http://localhost:3000/mcp
Production
Build the application for production:
pnpm build
Preview the production build locally:
pnpm preview
Deployment
Deploy to NuxtHub/Cloudflare:
pnpm deploy
Note: Make sure you have proper Cloudflare credentials configured via
wranglerCLI.
📚 API Endpoints
All resources are also available as REST API endpoints. Base URL: https://api.arthurdanjou.fr
Profile & Info
GET /api/profile- Comprehensive profile with bio, location, availability, career goalsGET /api/contact- Professional contact information and social linksGET /api/skills- Complete list of technical skillsGET /api/languages- Spoken languages with proficiency levelsGET /api/hobbies- Personal interests and activities
Professional Experience
GET /api/experiences- Professional work experience and projectsGET /api/projects- Portfolio of personal and professional projectsGET /api/education- Academic background and degrees
Real-time Data
GET /api/activity- Current activity and status (Discord integration)GET /api/wakatime- Detailed coding statistics and analyticsGET /api/status-page- Homelab infrastructure status and uptime
Tools & Resources
GET /api/uses- Tools, hardware, and software setupGET /api/resumes/{en|fr}- Download resume in English or French
Example Request
# Get profile information
curl https://api.arthurdanjou.fr/api/profile
# Get technical skills
curl https://api.arthurdanjou.fr/api/skills
# Download English resume
curl -O https://api.arthurdanjou.fr/api/resumes/en
Example Response
{
"name": "Arthur Danjou",
"title": "Data Science & Applied AI Student",
"location": "Paris, France",
"availability": "Available for final-year internship (April 2026)",
"bio": "Rigorous, curious, and motivated...",
...
}
🧪 Development
Linting
Check and fix code style issues:
# Run ESLint
pnpm lint
# Auto-fix issues where possible
pnpm lint --fix
Type Checking
Verify TypeScript types:
# Type check without emitting files
npx tsc --noEmit --skipLibCheck
# Or use Vue's type checker
npx vue-tsc --noEmit
Adding Content
Content is managed in the content/ directory. To add new items:
- Add a new experience: Create a markdown file in
content/experiences/ - Add a new project: Create a markdown file in
content/projects/ - Update skills: Edit
content/skills.json - Update profile: Edit
content/profile.md
Content changes are automatically picked up by Nuxt Content and reflected in the API.
📂 Content Structure
Content is managed in the content/ directory:
content/
├── skills.json # Technical skills
├── languages.json # Spoken languages
├── profile.md # Comprehensive profile info
├── contact.json # Contact information
├── hobbies.md # Personal interests
├── documentation.md # MCP documentation
├── experiences/*.md # Work experiences
├── projects/*.md # Project portfolio
├── education/*.md # Academic background
└── uses/*.md # Tools and setup
🔧 Technologies
- Frontend/Backend: Nuxt 4, Vue 3, Nitro
- MCP: @nuxtjs/mcp-toolkit
- Content: Nuxt Content with better-sqlite3
- Content Studio: nuxt-studio
- Deployment: Cloudflare Workers via NuxtHub
- Validation: Zod schemas
📖 MCP Integration
Connecting to ArtMCP
To use this server with an MCP-compatible client:
Option 1: Direct URL Connection
https://api.arthurdanjou.fr/mcp
Option 2: Configuration File
Add to your MCP client configuration (e.g., Claude Desktop, Cline, etc.):
{
"mcpServers": {
"artmcp": {
"url": "https://api.arthurdanjou.fr/mcp"
}
}
}
Using MCP Features
Once connected, your AI assistant can:
Query Resources:
"Show me Arthur's technical skills"
"What projects has Arthur worked on?"
"Get Arthur's contact information"
Call Tools:
"What is Arthur currently working on?" → Uses activity tool
"Show Arthur's coding statistics" → Uses stats tool
"Get Arthur's resume in French" → Uses resume-link tool
Use Prompts:
Pre-configured prompts guide the AI on how to query specific information
about skills, experiences, projects, and more.
Testing the Connection
You can test the MCP endpoint is working:
# Test MCP server availability
curl https://api.arthurdanjou.fr/mcp
# Or visit in browser (redirects to /docs)
open https://api.arthurdanjou.fr/mcp
❓ Troubleshooting & FAQ
Common Issues
Q: The development server won't start
- Ensure you have Node.js 18+ installed
- Try removing
node_modulesandpnpm-lock.yaml, then runpnpm installagain - Check if port 3000 is already in use
Q: Environment variables not working
- Copy
.env.exampleto.env - Ensure all required variables are set (though most are optional)
- Restart the development server after changing
.env
Q: Content changes not reflecting
- The Nuxt Content module caches content. Try restarting the dev server
- For production builds, clear the
.nuxtand.outputdirectories
Q: MCP endpoint returns 404
- Ensure the
@nuxtjs/mcp-toolkitmodule is properly installed - Check that
browserRedirectis configured innuxt.config.ts - The MCP endpoint should redirect to
/docswhen accessed via browser
Q: Deployment to Cloudflare fails
- Verify Cloudflare credentials are configured with
wrangler login - Check
wrangler.jsoncfor proper configuration - Ensure you have the necessary permissions on your Cloudflare account
Getting Help
- 📖 Check the documentation page
- 🐛 Open an issue on GitHub
- 💬 Review existing issues for similar problems
🤝 Contributing
This is a personal portfolio project. However, contributions are welcome!
How to Contribute
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Make your changes and commit:
git commit -m 'Add amazing feature' - Push to your branch:
git push origin feature/amazing-feature - Open a Pull Request
Ideas for Contributions
- 🐛 Bug fixes
- 📝 Documentation improvements
- ✨ New MCP tools or resources
- 🎨 UI/UX enhancements for the docs page
- 🔧 Performance optimizations
Code Style
This project uses:
- ESLint for code linting (single quotes, no trailing commas)
- TypeScript for type safety
- Vue 3 Composition API
Run pnpm lint before submitting PRs.
Using as a Template
Feel free to fork this project and adapt it for your own professional profile! Just:
- Update content in the
content/directory - Modify
nuxt.config.tswith your settings - Update environment variables for integrations (Discord, WakaTime, etc.)
- Deploy to your own Cloudflare account
📝 License
Private project - All rights reserved
👤 About
Arthur Danjou
- Data Science & Applied AI student at Paris Dauphine-PSL University, passionate about machine learning and mathematical modelling
- 📍 Paris, France
- 🐙 GitHub
Built with ❤️ using Nuxt and the Model Context Protocol