mirror of
https://github.com/ArthurDanjou/artmcp.git
synced 2026-01-14 16:54:22 +01:00
Add comprehensive profile enhancements: languages, certifications, profile info, and fix duplicate resource ID bug
Co-authored-by: ArthurDanjou <29738535+ArthurDanjou@users.noreply.github.com>
This commit is contained in:
@@ -79,13 +79,63 @@ export default defineContentConfig({
|
|||||||
schema: z.object({
|
schema: z.object({
|
||||||
body: z.array(z.object({
|
body: z.array(z.object({
|
||||||
name: z.string(),
|
name: z.string(),
|
||||||
url: z.string().url()
|
icon: z.string().optional(),
|
||||||
|
value: z.string().url()
|
||||||
}))
|
}))
|
||||||
})
|
})
|
||||||
}),
|
}),
|
||||||
hobbies: defineCollection({
|
hobbies: defineCollection({
|
||||||
type: 'page',
|
type: 'page',
|
||||||
source: 'hobbies.md'
|
source: 'hobbies.md'
|
||||||
|
}),
|
||||||
|
languages: defineCollection({
|
||||||
|
type: 'page',
|
||||||
|
source: 'languages.json',
|
||||||
|
schema: z.object({
|
||||||
|
body: z.array(z.object({
|
||||||
|
name: z.string(),
|
||||||
|
level: z.string(),
|
||||||
|
proficiency: z.string()
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
certifications: defineCollection({
|
||||||
|
type: 'page',
|
||||||
|
source: 'certifications.json',
|
||||||
|
schema: z.object({
|
||||||
|
body: z.array(z.object({
|
||||||
|
name: z.string(),
|
||||||
|
issuer: z.string(),
|
||||||
|
date: z.string(),
|
||||||
|
url: z.string().url().optional()
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
}),
|
||||||
|
profile: defineCollection({
|
||||||
|
type: 'page',
|
||||||
|
source: 'profile.json',
|
||||||
|
schema: z.object({
|
||||||
|
shortBio: z.string(),
|
||||||
|
location: z.object({
|
||||||
|
current: z.string(),
|
||||||
|
timezone: z.string(),
|
||||||
|
remote: z.boolean()
|
||||||
|
}),
|
||||||
|
availability: z.object({
|
||||||
|
status: z.string(),
|
||||||
|
types: z.array(z.string()),
|
||||||
|
preferences: z.array(z.string()),
|
||||||
|
startDate: z.string().optional()
|
||||||
|
}),
|
||||||
|
careerGoals: z.array(z.string()),
|
||||||
|
workPreferences: z.object({
|
||||||
|
workStyle: z.array(z.string()),
|
||||||
|
companySize: z.array(z.string()),
|
||||||
|
industries: z.array(z.string()),
|
||||||
|
roles: z.array(z.string())
|
||||||
|
}),
|
||||||
|
achievements: z.array(z.string())
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
20
content/certifications.json
Normal file
20
content/certifications.json
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"name": "Git & GitHub",
|
||||||
|
"issuer": "GitHub Learning Lab",
|
||||||
|
"date": "2021-06",
|
||||||
|
"url": "https://github.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Docker Essentials",
|
||||||
|
"issuer": "Self-taught through practical experience",
|
||||||
|
"date": "2021-09"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Machine Learning Specialization",
|
||||||
|
"issuer": "Various academic courses",
|
||||||
|
"date": "2024-09"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
19
content/languages.json
Normal file
19
content/languages.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"body": [
|
||||||
|
{
|
||||||
|
"name": "French",
|
||||||
|
"level": "Native",
|
||||||
|
"proficiency": "C2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "English",
|
||||||
|
"level": "Fluent",
|
||||||
|
"proficiency": "C1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Spanish",
|
||||||
|
"level": "Intermediate",
|
||||||
|
"proficiency": "B1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
32
content/profile.json
Normal file
32
content/profile.json
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"shortBio": "Software Engineer & Mathematics Student passionate about AI, Data Science, and Infrastructure. Building scalable solutions at the intersection of theory and practice.",
|
||||||
|
"location": {
|
||||||
|
"current": "Paris, France",
|
||||||
|
"timezone": "Europe/Paris (CET/CEST)",
|
||||||
|
"remote": true
|
||||||
|
},
|
||||||
|
"availability": {
|
||||||
|
"status": "open_to_opportunities",
|
||||||
|
"types": ["internship", "full-time", "part-time", "freelance"],
|
||||||
|
"preferences": ["remote", "hybrid"],
|
||||||
|
"startDate": "2025-06"
|
||||||
|
},
|
||||||
|
"careerGoals": [
|
||||||
|
"Become an expert in Machine Learning Engineering and MLOps",
|
||||||
|
"Contribute to open-source AI/ML projects",
|
||||||
|
"Build scalable data infrastructure for real-world applications",
|
||||||
|
"Combine mathematical rigor with practical engineering solutions"
|
||||||
|
],
|
||||||
|
"workPreferences": {
|
||||||
|
"workStyle": ["remote", "hybrid"],
|
||||||
|
"companySize": ["startup", "scale-up", "enterprise"],
|
||||||
|
"industries": ["AI/ML", "Data Science", "FinTech", "SaaS", "DevOps"],
|
||||||
|
"roles": ["Machine Learning Engineer", "Data Engineer", "Software Engineer", "MLOps Engineer"]
|
||||||
|
},
|
||||||
|
"achievements": [
|
||||||
|
"Built and maintained personal homelab with 10+ self-hosted services",
|
||||||
|
"Developed mini-games for Erisium, one of the largest French-speaking Minecraft servers",
|
||||||
|
"Created multiple full-stack applications using modern web technologies",
|
||||||
|
"Active contributor to various technical projects and communities"
|
||||||
|
]
|
||||||
|
}
|
||||||
10
server/api/certifications.get.ts
Normal file
10
server/api/certifications.get.ts
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
import { queryCollection } from '@nuxt/content/server'
|
||||||
|
|
||||||
|
export default defineCachedEventHandler(async (event) => {
|
||||||
|
return await queryCollection(event, 'certifications')
|
||||||
|
.where('extension', '=', 'json')
|
||||||
|
.first()
|
||||||
|
}, {
|
||||||
|
name: 'certifications-list',
|
||||||
|
maxAge: 3600 // 1 hour
|
||||||
|
})
|
||||||
10
server/api/languages.get.ts
Normal file
10
server/api/languages.get.ts
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
import { queryCollection } from '@nuxt/content/server'
|
||||||
|
|
||||||
|
export default defineCachedEventHandler(async (event) => {
|
||||||
|
return await queryCollection(event, 'languages')
|
||||||
|
.where('extension', '=', 'json')
|
||||||
|
.first()
|
||||||
|
}, {
|
||||||
|
name: 'languages-list',
|
||||||
|
maxAge: 3600 // 1 hour
|
||||||
|
})
|
||||||
10
server/api/profile.get.ts
Normal file
10
server/api/profile.get.ts
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
import { queryCollection } from '@nuxt/content/server'
|
||||||
|
|
||||||
|
export default defineCachedEventHandler(async (event) => {
|
||||||
|
return await queryCollection(event, 'profile')
|
||||||
|
.where('extension', '=', 'json')
|
||||||
|
.first()
|
||||||
|
}, {
|
||||||
|
name: 'profile-info',
|
||||||
|
maxAge: 3600 // 1 hour
|
||||||
|
})
|
||||||
@@ -162,7 +162,7 @@ function createServer() {
|
|||||||
)
|
)
|
||||||
|
|
||||||
server.registerResource(
|
server.registerResource(
|
||||||
'artmcp-contact',
|
'artmcp-hobbies',
|
||||||
'resource://artmcp/hobbies',
|
'resource://artmcp/hobbies',
|
||||||
{
|
{
|
||||||
title: 'ArtMCP Hobbies',
|
title: 'ArtMCP Hobbies',
|
||||||
@@ -199,6 +199,63 @@ function createServer() {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
server.registerResource(
|
||||||
|
'artmcp-languages',
|
||||||
|
'resource://artmcp/languages',
|
||||||
|
{
|
||||||
|
title: 'ArtMCP Languages',
|
||||||
|
description: 'Get Languages spoken by Arthur Danjou with proficiency levels'
|
||||||
|
},
|
||||||
|
async (uri) => {
|
||||||
|
const result = await $fetch('/api/languages')
|
||||||
|
return {
|
||||||
|
contents: [{
|
||||||
|
uri: uri.href,
|
||||||
|
mimeType: 'application/json',
|
||||||
|
text: JSON.stringify(result, null, 2)
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
server.registerResource(
|
||||||
|
'artmcp-certifications',
|
||||||
|
'resource://artmcp/certifications',
|
||||||
|
{
|
||||||
|
title: 'ArtMCP Certifications',
|
||||||
|
description: 'Get Certifications and achievements of Arthur Danjou'
|
||||||
|
},
|
||||||
|
async (uri) => {
|
||||||
|
const result = await $fetch('/api/certifications')
|
||||||
|
return {
|
||||||
|
contents: [{
|
||||||
|
uri: uri.href,
|
||||||
|
mimeType: 'application/json',
|
||||||
|
text: JSON.stringify(result, null, 2)
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
server.registerResource(
|
||||||
|
'artmcp-profile',
|
||||||
|
'resource://artmcp/profile',
|
||||||
|
{
|
||||||
|
title: 'ArtMCP Profile',
|
||||||
|
description: 'Get comprehensive profile information of Arthur Danjou including bio, location, availability, career goals, and work preferences'
|
||||||
|
},
|
||||||
|
async (uri) => {
|
||||||
|
const result = await $fetch('/api/profile')
|
||||||
|
return {
|
||||||
|
contents: [{
|
||||||
|
uri: uri.href,
|
||||||
|
mimeType: 'application/json',
|
||||||
|
text: JSON.stringify(result, null, 2)
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
// Tools
|
// Tools
|
||||||
server.registerTool(
|
server.registerTool(
|
||||||
'get_resume_link',
|
'get_resume_link',
|
||||||
@@ -420,6 +477,63 @@ function createServer() {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
server.registerPrompt(
|
||||||
|
'artmcp-languages',
|
||||||
|
{
|
||||||
|
title: 'Get Languages of Arthur Danjou',
|
||||||
|
description: 'Get Languages spoken by Arthur Danjou with proficiency levels'
|
||||||
|
},
|
||||||
|
async () => {
|
||||||
|
return {
|
||||||
|
messages: [{
|
||||||
|
role: 'user',
|
||||||
|
content: {
|
||||||
|
type: 'text',
|
||||||
|
text: `What languages does Arthur Danjou speak and at what proficiency level?`
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
server.registerPrompt(
|
||||||
|
'artmcp-certifications',
|
||||||
|
{
|
||||||
|
title: 'Get Certifications of Arthur Danjou',
|
||||||
|
description: 'Get Certifications and achievements of Arthur Danjou'
|
||||||
|
},
|
||||||
|
async () => {
|
||||||
|
return {
|
||||||
|
messages: [{
|
||||||
|
role: 'user',
|
||||||
|
content: {
|
||||||
|
type: 'text',
|
||||||
|
text: `What certifications and professional achievements does Arthur Danjou have?`
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
server.registerPrompt(
|
||||||
|
'artmcp-profile',
|
||||||
|
{
|
||||||
|
title: 'Get Profile Information of Arthur Danjou',
|
||||||
|
description: 'Get comprehensive profile information including bio, location, availability, and career goals'
|
||||||
|
},
|
||||||
|
async () => {
|
||||||
|
return {
|
||||||
|
messages: [{
|
||||||
|
role: 'user',
|
||||||
|
content: {
|
||||||
|
type: 'text',
|
||||||
|
text: `Provide me comprehensive profile information about Arthur Danjou including his bio, location, availability, career goals, and work preferences.`
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
return server
|
return server
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user