Files
artapi/README.md
2025-12-16 17:12:55 +00:00

12 KiB

ArtMCP - Arthur Danjou's MCP Server

Nuxt License Deployment MCP

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?

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 Danjou
  • resume-link - Get download link for resume in English or French
  • stats - Detailed coding statistics and analytics from WakaTime
  • status-page - Real-time status and uptime monitoring for homelab infrastructure
  • uses-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 wrangler CLI.

📚 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 goals
  • GET /api/contact - Professional contact information and social links
  • GET /api/skills - Complete list of technical skills
  • GET /api/languages - Spoken languages with proficiency levels
  • GET /api/hobbies - Personal interests and activities

Professional Experience

  • GET /api/experiences - Professional work experience and projects
  • GET /api/projects - Portfolio of personal and professional projects
  • GET /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 analytics
  • GET /api/status-page - Homelab infrastructure status and uptime

Tools & Resources

  • GET /api/uses - Tools, hardware, and software setup
  • GET /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:

  1. Add a new experience: Create a markdown file in content/experiences/
  2. Add a new project: Create a markdown file in content/projects/
  3. Update skills: Edit content/skills.json
  4. 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_modules and pnpm-lock.yaml, then run pnpm install again
  • Check if port 3000 is already in use

Q: Environment variables not working

  • Copy .env.example to .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 .nuxt and .output directories

Q: MCP endpoint returns 404

  • Ensure the @nuxtjs/mcp-toolkit module is properly installed
  • Check that browserRedirect is configured in nuxt.config.ts
  • The MCP endpoint should redirect to /docs when accessed via browser

Q: Deployment to Cloudflare fails

  • Verify Cloudflare credentials are configured with wrangler login
  • Check wrangler.jsonc for proper configuration
  • Ensure you have the necessary permissions on your Cloudflare account

Getting Help

🤝 Contributing

This is a personal portfolio project. However, contributions are welcome!

How to Contribute

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Make your changes and commit: git commit -m 'Add amazing feature'
  4. Push to your branch: git push origin feature/amazing-feature
  5. 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:

  1. Update content in the content/ directory
  2. Modify nuxt.config.ts with your settings
  3. Update environment variables for integrations (Discord, WakaTime, etc.)
  4. 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
  • 🔗 LinkedIn
  • 🐙 GitHub
  • 📧 Email

Built with ❤️ using Nuxt and the Model Context Protocol