fix: mettre à jour les URL de l'API et ajouter la gestion des collections dans la configuration

This commit is contained in:
2025-12-16 16:43:30 +01:00
parent 579f7b4030
commit e49fc32e52
10 changed files with 362 additions and 325 deletions

View File

@@ -2,7 +2,7 @@
A comprehensive [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server exposing professional profile information about Arthur Danjou. Built with [Nuxt](https://nuxt.com) and deployed on [NuxtHub](https://hub.nuxt.com) at the Edge. A comprehensive [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server exposing professional profile information about Arthur Danjou. Built with [Nuxt](https://nuxt.com) and deployed on [NuxtHub](https://hub.nuxt.com) at the Edge.
🔗 **Live Server**: https://mcp.arthurdanjou.fr 🔗 **Live Server**: https://api.arthurdanjou.fr/mcp
## 🎯 Features ## 🎯 Features
@@ -171,7 +171,7 @@ content/
To use this server with an MCP client: To use this server with an MCP client:
1. Configure your MCP client to connect to `https://mcp.arthurdanjou.fr/mcp` 1. Configure your MCP client to connect to `https://api.arthurdanjou.fr/mcp/mcp`
2. Or use the API directly via REST endpoints 2. Or use the API directly via REST endpoints
Example MCP client configuration: Example MCP client configuration:
@@ -179,7 +179,7 @@ Example MCP client configuration:
{ {
"mcpServers": { "mcpServers": {
"artmcp": { "artmcp": {
"url": "https://mcp.arthurdanjou.fr/mcp" "url": "https://api.arthurdanjou.fr/mcp/mcp"
} }
} }
} }

View File

@@ -1,134 +1,19 @@
<script setup lang="ts"> <script setup lang="ts">
const { data: documentation } = await useAsyncData('index', () => const { data: index } = await useAsyncData('index', () =>
queryCollection('documentation').first() queryCollection('index').first()
) )
</script> </script>
<template> <template>
<div class="documentation-page"> <div>
<ContentRenderer <ContentRenderer
v-if="documentation" v-if="index"
:value="documentation" :value="index"
class="content"
/> />
<div <div
v-else v-else
class="loading"
> >
Loading documentation... Loading index page...
</div> </div>
</div> </div>
</template> </template>
<style scoped>
.documentation-page {
max-width: 800px;
margin: 0 auto;
padding: 2rem;
font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
line-height: 1.6;
color: #333;
}
.loading {
text-align: center;
padding: 2rem;
color: #666;
}
.content :deep(h1) {
font-size: 2.5rem;
margin-bottom: 1rem;
color: #1a1a1a;
border-bottom: 2px solid #e5e5e5;
padding-bottom: 0.5rem;
}
.content :deep(h2) {
font-size: 1.75rem;
margin-top: 2rem;
margin-bottom: 1rem;
color: #2a2a2a;
}
.content :deep(h3) {
font-size: 1.25rem;
margin-top: 1.5rem;
margin-bottom: 0.5rem;
color: #3a3a3a;
}
.content :deep(p) {
margin-bottom: 1rem;
}
.content :deep(hr) {
border: none;
border-top: 1px solid #e5e5e5;
margin: 2rem 0;
}
.content :deep(code) {
background-color: #f5f5f5;
padding: 0.2em 0.4em;
border-radius: 3px;
font-size: 0.9em;
font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
}
.content :deep(pre) {
background-color: #1e1e1e;
color: #d4d4d4;
padding: 1rem;
border-radius: 6px;
overflow-x: auto;
margin: 1rem 0;
}
.content :deep(pre code) {
background-color: transparent;
padding: 0;
color: inherit;
}
.content :deep(ul),
.content :deep(ol) {
margin-bottom: 1rem;
padding-left: 1.5rem;
}
.content :deep(li) {
margin-bottom: 0.5rem;
}
.content :deep(a) {
color: #0066cc;
text-decoration: none;
}
.content :deep(a:hover) {
text-decoration: underline;
}
.content :deep(strong) {
font-weight: 600;
}
@media (max-width: 768px) {
.documentation-page {
padding: 1rem;
}
.content :deep(h1) {
font-size: 1.75rem;
}
.content :deep(h2) {
font-size: 1.5rem;
}
.content :deep(h3) {
font-size: 1.1rem;
}
}
</style>

13
app/pages/mcp.vue Normal file
View File

@@ -0,0 +1,13 @@
<script lang="ts" setup>
</script>
<template>
<div>
</div>
</template>
<style scoped>
</style>

View File

@@ -104,9 +104,13 @@ export default defineContentConfig({
type: 'data', type: 'data',
source: 'profile.md' source: 'profile.md'
}), }),
documentation: defineCollection({ index: defineCollection({
type: 'page', type: 'page',
source: 'index.md' source: 'index.md'
}),
mcp: defineCollection({
type: 'page',
source: 'mcp.md'
}) })
} }
}) })

View File

@@ -39,7 +39,7 @@
{ {
"name": "MCP Server", "name": "MCP Server",
"icon": "i-ph:globe-duotone", "icon": "i-ph:globe-duotone",
"value": "https://mcp.arthurdanjou.fr" "value": "https://api.arthurdanjou.fr/mcp"
}, },
{ {
"name": "Status Page", "name": "Status Page",

View File

@@ -1,195 +1,134 @@
--- <script setup lang="ts">
title: ArtMCP Documentation const { data: documentation } = await useAsyncData('index', () =>
description: Documentation for ArtMCP - Arthur Danjou's Model Context Protocol Server queryCollection('documentation').first()
mcp: https://mcp.arthurdanjou.fr/mcp )
--- </script>
# ArtMCP Documentation <template>
<div class="documentation-page">
Welcome to **ArtMCP**, a comprehensive [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server exposing professional profile information about Arthur Danjou. Built with [Nuxt](https://nuxt.com) and deployed on [NuxtHub](https://hub.nuxt.com) at the Edge. <ContentRenderer
v-if="documentation"
## Installation :value="documentation"
class="content"
::install-button{:url="mcp"} />
:: <div
v-else
::install-button{:url="mcp" ide="vscode"} class="loading"
:: >
Loading documentation...
## Overview </div>
</div>
ArtMCP provides AI assistants and applications with structured access to Arthur Danjou's professional information through the Model Context Protocol. This includes profile data, skills, experiences, projects, and real-time activity information. </template>
--- <style scoped>
.documentation-page {
## Tools max-width: 800px;
margin: 0 auto;
Tools are executable functions that AI assistants can call to perform actions or retrieve dynamic data. padding: 2rem;
font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
### `activity` line-height: 1.6;
color: #333;
**Description:** Real-time current activity and status of Arthur Danjou, including what he's currently working on. }
### `resume-link` .loading {
text-align: center;
**Description:** Retrieves a direct download link to Arthur Danjou's professional resume in the specified language. padding: 2rem;
color: #666;
- **Input:** `lang` - The language for the resume: `'en'` for English or `'fr'` for French. }
### `stats` .content :deep(h1) {
font-size: 2.5rem;
**Description:** Detailed coding statistics and analytics from WakaTime, including programming languages, time spent coding, and productivity metrics. margin-bottom: 1rem;
color: #1a1a1a;
### `status-page` border-bottom: 2px solid #e5e5e5;
padding-bottom: 0.5rem;
**Description:** Real-time status, uptime monitoring, and incident reports for Arthur Danjou's homelab infrastructure, powered by UptimeKuma. }
### `uses-by-category` .content :deep(h2) {
font-size: 1.75rem;
**Description:** Retrieves a filtered list of tools, software, and hardware used by Arthur Danjou based on a specific category. margin-top: 2rem;
margin-bottom: 1rem;
- **Input:** `categoryName` - The category to filter by: `'homelab'`, `'ide'`, `'hardware'`, or `'software'`. color: #2a2a2a;
}
### `weather`
.content :deep(h3) {
**Description:** Get current weather for a city. font-size: 1.25rem;
margin-top: 1.5rem;
- **Input:** `city` - City name. margin-bottom: 0.5rem;
color: #3a3a3a;
--- }
## Prompts .content :deep(p) {
margin-bottom: 1rem;
Prompts are pre-configured conversation starters that guide AI assistants on how to query specific information. }
### `activity` .content :deep(hr) {
border: none;
**Description:** Generates a prompt to retrieve Arthur Danjou's current real-time activity status, including what he is currently working on. border-top: 1px solid #e5e5e5;
margin: 2rem 0;
### `contact` }
**Description:** Generates a prompt to retrieve Arthur Danjou's contact information and social media links, including email, LinkedIn, GitHub, Twitter, Discord, and personal websites. .content :deep(code) {
background-color: #f5f5f5;
### `hobbies` padding: 0.2em 0.4em;
border-radius: 3px;
**Description:** Generates a prompt to retrieve information about Arthur Danjou's personal hobbies, interests, and passions outside of professional work. font-size: 0.9em;
font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
### `languages` }
**Description:** Generates a prompt to retrieve the languages spoken by Arthur Danjou along with detailed proficiency levels for each language. .content :deep(pre) {
background-color: #1e1e1e;
### `profile` color: #d4d4d4;
padding: 1rem;
**Description:** Generates a prompt to retrieve comprehensive professional profile information about Arthur Danjou, including biography, location, availability status, career goals, and work preferences. border-radius: 6px;
overflow-x: auto;
### `projects` margin: 1rem 0;
}
**Description:** Generates a prompt to retrieve a comprehensive list of personal and professional projects developed by Arthur Danjou, showcasing his technical skills and achievements.
.content :deep(pre code) {
### `resume` background-color: transparent;
padding: 0;
**Description:** Generates a prompt to request and retrieve Arthur Danjou's professional resume in the specified language. color: inherit;
}
- **Input:** `lang` - The language for the resume: `'en'` for English or `'fr'` for French.
.content :deep(ul),
### `skills` .content :deep(ol) {
margin-bottom: 1rem;
**Description:** Generates a prompt to retrieve a comprehensive list of technical skills, programming languages, frameworks, and tools mastered by Arthur Danjou. padding-left: 1.5rem;
}
### `stats`
.content :deep(li) {
**Description:** Generates a prompt to retrieve Arthur Danjou's detailed coding statistics and analytics powered by WakaTime, including programming languages, time spent coding, and productivity metrics. margin-bottom: 0.5rem;
}
### `status-page`
.content :deep(a) {
**Description:** Generates a prompt to retrieve the real-time status page of Arthur Danjou's homelab infrastructure, including uptime monitoring and incident reports powered by UptimeKuma. color: #0066cc;
text-decoration: none;
### `uses-by-category` }
**Description:** Generates a prompt to retrieve tools, software, and hardware used by Arthur Danjou, filtered by a specific category. .content :deep(a:hover) {
text-decoration: underline;
- **Input:** `categoryName` - The category to filter by: `'homelab'`, `'ide'`, `'hardware'`, or `'software'`. }
--- .content :deep(strong) {
font-weight: 600;
## Resources }
Resources are static or semi-static data endpoints that provide structured information about Arthur Danjou. @media (max-width: 768px) {
.documentation-page {
### `resource://artmcp/profile` padding: 1rem;
**Title:** Arthur Danjou - Professional Profile :br**Description:** Comprehensive professional profile of Arthur Danjou, including biography, location, availability status, career goals, and work preferences.
### `resource://artmcp/contact`
**Title:** Arthur Danjou - Contact Information & Social Media Links :br**Description:** Contact information and social media links for Arthur Danjou, including email, LinkedIn, GitHub, Twitter, Discord, and personal websites.
### `resource://artmcp/education`
**Title:** Arthur Danjou - Education & Academic Background :br**Description:** Arthur Danjou's educational background, including degrees, institutions, and academic achievements.
### `resource://artmcp/experiences`
**Title:** Arthur Danjou - Experiences :br**Description:** A detailed list of Arthur Danjou's professional work experiences, including roles, companies, and responsibilities.
### `resource://artmcp/hobbies`
**Title:** Arthur Danjou - Hobbies & Interests :br**Description:** Arthur Danjou's personal hobbies, interests, and passions outside of professional work.
### `resource://artmcp/languages`
**Title:** Arthur Danjou - Spoken Languages & Proficiency Levels :br**Description:** Languages spoken by Arthur Danjou with detailed proficiency levels for each language.
### `resource://artmcp/projects`
**Title:** Arthur Danjou - Projects Portfolio :br**Description:** A comprehensive collection of projects developed by Arthur Danjou, showcasing technical skills and achievements.
### `resource://artmcp/skills`
**Title:** Arthur Danjou - Skills :br**Description:** A comprehensive list of technical skills, programming languages, frameworks, and tools mastered by Arthur Danjou.
### `resource://artmcp/uses`
**Title:** Arthur Danjou - Tech Stack & Tools :br**Description:** A curated list of tools, software, and hardware used by Arthur Danjou, organized by categories (homelab, IDE, hardware, software).
---
## MCP Integration
To use this server with an MCP client, configure your client to connect to:
```text
https://mcp.arthurdanjou.fr/mcp
```
### Example Configuration
```json
{
"mcpServers": {
"artmcp": {
"url": "https://mcp.arthurdanjou.fr/mcp"
} }
.content :deep(h1) {
font-size: 1.75rem;
}
.content :deep(h2) {
font-size: 1.5rem;
}
.content :deep(h3) {
font-size: 1.1rem;
} }
} }
``` </style>
---
## API Endpoints
All resources are also available as REST API endpoints:
- `GET /api/profile` - Profile information
- `GET /api/contact` - Contact information
- `GET /api/skills` - Technical skills
- `GET /api/experiences` - Work experiences
- `GET /api/education` - Education background
- `GET /api/projects` - Projects portfolio
- `GET /api/languages` - Spoken languages
- `GET /api/hobbies` - Hobbies and interests
- `GET /api/uses` - Tech stack and tools
- `GET /api/activity` - Real-time activity
- `GET /api/wakatime` - Coding statistics
- `GET /api/status-page` - Status page
- `GET /api/resumes/{en|fr}` - Download resume

195
content/mcp.md Normal file
View File

@@ -0,0 +1,195 @@
---
title: ArtMCP Documentation
description: Documentation for ArtMCP - Arthur Danjou's Model Context Protocol Server
mcp: https://api.arthurdanjou.fr/mcp
---
# ArtMCP Documentation
Welcome to **ArtMCP**, a comprehensive [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server exposing professional profile information about Arthur Danjou. Built with [Nuxt](https://nuxt.com) and deployed on [NuxtHub](https://hub.nuxt.com) at the Edge.
## Installation
::install-button{:url="mcp"}
::
::install-button{:url="mcp" ide="vscode"}
::
## Overview
ArtMCP provides AI assistants and applications with structured access to Arthur Danjou's professional information through the Model Context Protocol. This includes profile data, skills, experiences, projects, and real-time activity information.
---
## Tools
Tools are executable functions that AI assistants can call to perform actions or retrieve dynamic data.
### `activity`
**Description:** Real-time current activity and status of Arthur Danjou, including what he's currently working on.
### `resume-link`
**Description:** Retrieves a direct download link to Arthur Danjou's professional resume in the specified language.
- **Input:** `lang` - The language for the resume: `'en'` for English or `'fr'` for French.
### `stats`
**Description:** Detailed coding statistics and analytics from WakaTime, including programming languages, time spent coding, and productivity metrics.
### `status-page`
**Description:** Real-time status, uptime monitoring, and incident reports for Arthur Danjou's homelab infrastructure, powered by UptimeKuma.
### `uses-by-category`
**Description:** Retrieves a filtered list of tools, software, and hardware used by Arthur Danjou based on a specific category.
- **Input:** `categoryName` - The category to filter by: `'homelab'`, `'ide'`, `'hardware'`, or `'software'`.
### `weather`
**Description:** Get current weather for a city.
- **Input:** `city` - City name.
---
## Prompts
Prompts are pre-configured conversation starters that guide AI assistants on how to query specific information.
### `activity`
**Description:** Generates a prompt to retrieve Arthur Danjou's current real-time activity status, including what he is currently working on.
### `contact`
**Description:** Generates a prompt to retrieve Arthur Danjou's contact information and social media links, including email, LinkedIn, GitHub, Twitter, Discord, and personal websites.
### `hobbies`
**Description:** Generates a prompt to retrieve information about Arthur Danjou's personal hobbies, interests, and passions outside of professional work.
### `languages`
**Description:** Generates a prompt to retrieve the languages spoken by Arthur Danjou along with detailed proficiency levels for each language.
### `profile`
**Description:** Generates a prompt to retrieve comprehensive professional profile information about Arthur Danjou, including biography, location, availability status, career goals, and work preferences.
### `projects`
**Description:** Generates a prompt to retrieve a comprehensive list of personal and professional projects developed by Arthur Danjou, showcasing his technical skills and achievements.
### `resume`
**Description:** Generates a prompt to request and retrieve Arthur Danjou's professional resume in the specified language.
- **Input:** `lang` - The language for the resume: `'en'` for English or `'fr'` for French.
### `skills`
**Description:** Generates a prompt to retrieve a comprehensive list of technical skills, programming languages, frameworks, and tools mastered by Arthur Danjou.
### `stats`
**Description:** Generates a prompt to retrieve Arthur Danjou's detailed coding statistics and analytics powered by WakaTime, including programming languages, time spent coding, and productivity metrics.
### `status-page`
**Description:** Generates a prompt to retrieve the real-time status page of Arthur Danjou's homelab infrastructure, including uptime monitoring and incident reports powered by UptimeKuma.
### `uses-by-category`
**Description:** Generates a prompt to retrieve tools, software, and hardware used by Arthur Danjou, filtered by a specific category.
- **Input:** `categoryName` - The category to filter by: `'homelab'`, `'ide'`, `'hardware'`, or `'software'`.
---
## Resources
Resources are static or semi-static data endpoints that provide structured information about Arthur Danjou.
### `resource://artmcp/profile`
**Title:** Arthur Danjou - Professional Profile :br**Description:** Comprehensive professional profile of Arthur Danjou, including biography, location, availability status, career goals, and work preferences.
### `resource://artmcp/contact`
**Title:** Arthur Danjou - Contact Information & Social Media Links :br**Description:** Contact information and social media links for Arthur Danjou, including email, LinkedIn, GitHub, Twitter, Discord, and personal websites.
### `resource://artmcp/education`
**Title:** Arthur Danjou - Education & Academic Background :br**Description:** Arthur Danjou's educational background, including degrees, institutions, and academic achievements.
### `resource://artmcp/experiences`
**Title:** Arthur Danjou - Experiences :br**Description:** A detailed list of Arthur Danjou's professional work experiences, including roles, companies, and responsibilities.
### `resource://artmcp/hobbies`
**Title:** Arthur Danjou - Hobbies & Interests :br**Description:** Arthur Danjou's personal hobbies, interests, and passions outside of professional work.
### `resource://artmcp/languages`
**Title:** Arthur Danjou - Spoken Languages & Proficiency Levels :br**Description:** Languages spoken by Arthur Danjou with detailed proficiency levels for each language.
### `resource://artmcp/projects`
**Title:** Arthur Danjou - Projects Portfolio :br**Description:** A comprehensive collection of projects developed by Arthur Danjou, showcasing technical skills and achievements.
### `resource://artmcp/skills`
**Title:** Arthur Danjou - Skills :br**Description:** A comprehensive list of technical skills, programming languages, frameworks, and tools mastered by Arthur Danjou.
### `resource://artmcp/uses`
**Title:** Arthur Danjou - Tech Stack & Tools :br**Description:** A curated list of tools, software, and hardware used by Arthur Danjou, organized by categories (homelab, IDE, hardware, software).
---
## MCP Integration
To use this server with an MCP client, configure your client to connect to:
```text
https://api.arthurdanjou.fr/mcp/mcp
```
### Example Configuration
```json
{
"mcpServers": {
"artmcp": {
"url": "https://api.arthurdanjou.fr/mcp/mcp"
}
}
}
```
---
## API Endpoints
All resources are also available as REST API endpoints:
- `GET /api/profile` - Profile information
- `GET /api/contact` - Contact information
- `GET /api/skills` - Technical skills
- `GET /api/experiences` - Work experiences
- `GET /api/education` - Education background
- `GET /api/projects` - Projects portfolio
- `GET /api/languages` - Spoken languages
- `GET /api/hobbies` - Hobbies and interests
- `GET /api/uses` - Tech stack and tools
- `GET /api/activity` - Real-time activity
- `GET /api/wakatime` - Coding statistics
- `GET /api/status-page` - Status page
- `GET /api/resumes/{en|fr}` - Download resume

View File

@@ -15,7 +15,7 @@ tags:
A comprehensive [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server exposing professional profile information about Arthur Danjou. Built with [Nuxt](https://nuxt.com) and deployed on [NuxtHub](https://hub.nuxt.com) at the Edge. A comprehensive [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server exposing professional profile information about Arthur Danjou. Built with [Nuxt](https://nuxt.com) and deployed on [NuxtHub](https://hub.nuxt.com) at the Edge.
🔗 **Live Server**: https://mcp.arthurdanjou.fr 🔗 **Live Server**: https://api.arthurdanjou.fr/mcp
## 🎯 Features ## 🎯 Features
@@ -184,7 +184,7 @@ content/
To use this server with an MCP client: To use this server with an MCP client:
1. Configure your MCP client to connect to `https://mcp.arthurdanjou.fr/mcp` 1. Configure your MCP client to connect to `https://api.arthurdanjou.fr/mcp/mcp`
2. Or use the API directly via REST endpoints 2. Or use the API directly via REST endpoints
Example MCP client configuration: Example MCP client configuration:
@@ -192,7 +192,7 @@ Example MCP client configuration:
{ {
"mcpServers": { "mcpServers": {
"artmcp": { "artmcp": {
"url": "https://mcp.arthurdanjou.fr/mcp" "url": "https://api.arthurdanjou.fr/mcp/mcp"
} }
} }
} }

View File

@@ -74,7 +74,8 @@ export default defineNuxtConfig({
mcp: { mcp: {
name: 'ArtMCP', name: 'ArtMCP',
version: '1.0.0' version: '1.0.0',
browserRedirect: '/mcp'
}, },
studio: { studio: {

View File

@@ -6,7 +6,7 @@ export default defineMcpTool({
lang: z.enum(['en', 'fr']).describe('The language for the resume: \'en\' for English or \'fr\' for French.') lang: z.enum(['en', 'fr']).describe('The language for the resume: \'en\' for English or \'fr\' for French.')
}, },
handler: async ({ lang }) => { handler: async ({ lang }) => {
const base_url = import.meta.dev ? 'http://localhost:3000/api' : 'https://mcp.arthurdanjou.fr/api' const base_url = import.meta.dev ? 'http://localhost:3000/api' : 'https://api.arthurdanjou.fr/api'
const url = `${base_url}/resumes/${lang}` const url = `${base_url}/resumes/${lang}`
return { return {
content: [{ type: 'text', text: JSON.stringify(url) }] content: [{ type: 'text', text: JSON.stringify(url) }]