Files
artmcp/README.md
2025-12-17 08:39:54 +00:00

424 lines
13 KiB
Markdown

# ArtAPI - Arthur Danjou's Portfolio API
[![Nuxt](https://img.shields.io/badge/Nuxt-4.2.2-00DC82?logo=nuxt.js&logoColor=white)](https://nuxt.com)
![License](https://img.shields.io/badge/License-Private-red.svg)
[![Deployment](https://img.shields.io/badge/Deployed%20on-Cloudflare-F38020?logo=cloudflare&logoColor=white)](https://www.cloudflare.com/)
[![MCP](https://img.shields.io/badge/Protocol-MCP-blue)](https://modelcontextprotocol.io)
A comprehensive REST API exposing professional profile information about Arthur Danjou. Built with [Nuxt](https://nuxt.com) and deployed on [NuxtHub](https://hub.nuxt.com) at the Edge. The API powers Arthur's portfolio and includes a [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server component for AI assistant integration.
🔗 **Base URL**: https://api.arthurdanjou.fr
📚 **Documentation**: https://api.arthurdanjou.fr/docs
🤖 **MCP Server**: https://api.arthurdanjou.fr/mcp
---
## 📋 Table of Contents
- [What is ArtAPI?](#-what-is-artapi)
- [API Endpoints](#-api-endpoints)
- [Getting Started](#-getting-started)
- [Architecture](#-architecture)
- [MCP Server Component](#-mcp-server-component)
- [Development](#-development)
- [Content Structure](#-content-structure)
- [Troubleshooting & FAQ](#-troubleshooting--faq)
- [Contributing](#-contributing)
- [License](#-license)
- [About](#-about)
---
## 💡 What is ArtAPI?
ArtAPI is a **comprehensive REST API** that serves as the backend for Arthur Danjou's portfolio. It provides structured access to professional information including skills, experiences, projects, education, and real-time activity data. The API is designed to power portfolio websites, applications, and integrations.
**Key Features:**
- 📊 **Portfolio Data**: Complete professional profile, skills, experiences, and projects
- 🎓 **Education & Background**: Academic history and achievements
-**Real-time Data**: Current activity status and coding statistics via integrations
- 📄 **Resume Access**: Download resumes in multiple languages
- 🤖 **MCP Integration**: Optional Model Context Protocol server for AI assistant access
- 🌐 **RESTful Design**: Clean, well-documented API endpoints
**Use Cases:**
- 🌐 Power portfolio websites and applications
- 📱 Build mobile apps showcasing professional information
- 🤖 Enable AI assistants to answer questions about Arthur's experience
- 📊 Display real-time coding statistics and activity dashboards
- 🔍 Query specific information programmatically for integrations
## 📚 API Endpoints
All API endpoints are available at the base URL: `https://api.arthurdanjou.fr`
### Profile & Information
- `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 (programming languages, frameworks, tools)
- `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 from WakaTime
- `GET /api/status-page` - Homelab infrastructure status and uptime monitoring
### Tools & Resources
- `GET /api/uses` - Tools, hardware, and software setup
- `GET /api/resumes/{en|fr}` - Download resume in English or French
### Example Usage
```bash
# Get profile information
curl https://api.arthurdanjou.fr/api/profile
# Get technical skills
curl https://api.arthurdanjou.fr/api/skills
# Get current activity
curl https://api.arthurdanjou.fr/api/activity
# Download English resume
curl -O https://api.arthurdanjou.fr/api/resumes/en
```
### Example Response
```json
{
"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...",
...
}
```
## 🚀 Getting Started
### Prerequisites
- Bun 1.0+ (JavaScript runtime and package manager)
- Alternatively: Node.js 18+ with pnpm 10.12.1+
> **Note:** This project uses Bun as the primary runtime and package manager. Node.js with pnpm can be used as an alternative.
### Installation
```bash
# Clone the repository
git clone https://github.com/ArthurDanjou/artapi.git
cd artapi
# Install dependencies
bun install
```
### Environment Variables
Create a `.env` file (optional):
```bash
# 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`:
```bash
bun 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:
```bash
bun run build
```
Preview the production build locally:
```bash
bun preview
```
### Deployment
Deploy to NuxtHub/Cloudflare:
```bash
# First time: Login to Cloudflare
wrangler login
# Deploy the application
bun deploy
```
> **Note:** Make sure you have proper Cloudflare credentials configured. Run `wrangler login` to authenticate if this is your first deployment.
## 🏗️ Architecture
ArtAPI is built with modern web technologies and follows a serverless architecture:
**Core Stack:**
- **Nuxt 4** - Full-stack framework with Nitro for server-side rendering and API routes
- **Vue 3** - Frontend framework (for documentation pages)
- **Cloudflare Workers** - Edge deployment via NuxtHub for global low-latency access
- **TypeScript** - Type-safe development
**Data & Content:**
- **Nuxt Content** - Content management with markdown and JSON files
- **Cloudflare D1** - SQLite-compatible database for content queries in production
- **Zod** - Schema validation for API responses
**Additional Features:**
- **@nuxtjs/mcp-toolkit** - Model Context Protocol server implementation
- **nuxt-studio** - Content management studio interface
- **Discord/WakaTime APIs** - Real-time integrations for activity and stats
**Architecture Benefits:**
-**Fast**: Edge deployment on Cloudflare's global network
- 🔒 **Type-safe**: Full TypeScript coverage
- 📝 **Content-first**: Easy to update via markdown/JSON files
- 🌐 **Multi-protocol**: REST API + MCP server in one package
- 🚀 **Scalable**: Serverless architecture with automatic scaling
## 🤖 MCP Server Component
In addition to the REST API, ArtAPI includes a **Model Context Protocol (MCP) server** component that enables AI assistants and MCP-compatible applications to access the same data through the MCP protocol.
**MCP Endpoint**: `https://api.arthurdanjou.fr/mcp`
### Why MCP?
The MCP server allows AI assistants (like Claude Desktop, Cline, etc.) to directly query Arthur's professional information, making it easy to:
- Answer questions about experience and skills
- Generate customized resumes and cover letters
- Access real-time activity and coding statistics
- Query specific information through natural language
### MCP Resources
The MCP server exposes all API data as resources:
- **📊 Skills** (`resource://artmcp/skills`) - Technical skills and tools
- **💼 Experiences** (`resource://artmcp/experiences`) - Work experience
- **🚀 Projects** (`resource://artmcp/projects`) - Project portfolio
- **🎓 Education** (`resource://artmcp/education`) - Academic background
- **🌐 Languages** (`resource://artmcp/languages`) - Spoken languages
- **👤 Profile** (`resource://artmcp/profile`) - Complete profile
- **🎨 Hobbies** (`resource://artmcp/hobbies`) - Personal interests
- **📞 Contact** (`resource://artmcp/contact`) - Contact information
- **🛠️ Uses** (`resource://artmcp/uses`) - Tech stack and tools
### MCP Tools
Dynamic tools for AI assistants:
- **`activity`** - Get current real-time activity status
- **`resume-link`** - Get resume download link (English/French)
- **`stats`** - Retrieve WakaTime coding statistics
- **`status-page`** - Check homelab infrastructure status
- **`uses-by-category`** - Filter tools by category
- **`weather`** - Get weather for a city
### Connecting via MCP
**Option 1: Direct URL**
```
https://api.arthurdanjou.fr/mcp
```
**Option 2: Configuration File**
Add to your MCP client configuration:
```json
{
"mcpServers": {
"artapi": {
"url": "https://api.arthurdanjou.fr/mcp"
}
}
}
```
**Usage Examples:**
```
"Show me Arthur's technical skills"
"What is Arthur currently working on?"
"Get Arthur's resume in French"
```
## 🧪 Development
### Linting
Check and fix code style issues:
```bash
# Run ESLint
bun lint
# Auto-fix issues where possible
bun lint --fix
```
### Type Checking
Verify TypeScript types:
```bash
# 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
```
## ❓ Troubleshooting & FAQ
### Common Issues
**Q: The development server won't start**
- Ensure you have Bun 1.0+ installed
- Try removing `node_modules` and `bun.lockb`, then run `bun 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
- 📖 Check the [documentation page](https://api.arthurdanjou.fr/docs)
- 🐛 [Open an issue](https://github.com/ArthurDanjou/artapi/issues) on GitHub
- 💬 Review existing issues for similar problems
## 🤝 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 `bun 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](https://go.arthurdanjou.fr/linkedin)
- 🐙 [GitHub](https://go.arthurdanjou.fr/github)
- 📧 [Email](https://go.arthurdanjou.fr/mail-pro)
---
Built with ❤️ using Nuxt and the Model Context Protocol