Compare commits

...

3 Commits

5 changed files with 113 additions and 11 deletions

3
.gitignore vendored
View File

@@ -24,5 +24,4 @@ logs
.env.*
!.env.example
.wrangler
wrangler.jsonc
.wrangler

View File

@@ -76,7 +76,7 @@ const apiEndpoints = [
</script>
<template>
<div class="min-h-screen bg-gray-50 dark:bg-gray-900">
<div class="min-h-screen bg-linear-to-b from-gray-50 to-white dark:from-neutral-950 dark:to-neutral-900">
<!-- Hero Header -->
<div class="bg-linear-to-br from-primary to-primary-600 dark:from-primary-900 dark:to-primary-800">
<UContainer class="py-16">
@@ -224,7 +224,7 @@ const apiEndpoints = [
</h3>
<UCard
:ui="{
body: 'bg-gray-900 dark:bg-gray-950'
body: 'bg-neutral-900 dark:bg-neutral-950'
}"
>
<pre class="text-sm text-gray-100 overflow-x-auto">
@@ -245,7 +245,7 @@ const apiEndpoints = [
</h3>
<UCard
:ui="{
body: 'bg-gray-900 dark:bg-gray-950'
body: 'bg-neutral-900 dark:bg-neutral-950'
}"
>
<pre class="text-sm text-gray-100 overflow-x-auto"><code>https://api.arthurdanjou.fr/mcp</code></pre>
@@ -384,7 +384,7 @@ const apiEndpoints = [
{{ resource.title }}
</h3>
</div>
<code class="text-xs text-gray-600 dark:text-gray-400 bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded">
<code class="text-xs text-gray-600 dark:text-gray-400 bg-neutral-100 dark:bg-neutral-800 px-2 py-1 rounded">
{{ resource.uri }}
</code>
<p class="text-sm text-gray-600 dark:text-gray-400">
@@ -408,7 +408,7 @@ const apiEndpoints = [
<div
v-for="endpoint in apiEndpoints"
:key="endpoint.path"
class="flex items-center gap-3 p-3 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors"
class="flex items-center gap-3 p-3 rounded-lg hover:bg-neutral-100 dark:hover:bg-neutral-800 transition-colors"
>
<UBadge
color="success"

View File

@@ -43,7 +43,7 @@ const resources = [
</script>
<template>
<div class="min-h-screen bg-linear-to-b from-gray-50 to-white dark:from-gray-950 dark:to-gray-900">
<div class="min-h-screen bg-linear-to-b from-gray-50 to-white dark:from-neutral-950 dark:to-neutral-900">
<!-- Hero Section -->
<UContainer class="py-16 sm:py-24">
<div class="text-center">
@@ -181,7 +181,7 @@ const resources = [
size="lg"
block
:ui="{
base: 'hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors duration-200'
base: 'hover:bg-neutral-50 dark:hover:bg-neutral-800 transition-colors duration-200'
}"
>
<div class="flex flex-col items-center gap-2">
@@ -213,7 +213,7 @@ const resources = [
</p>
<UCard
:ui="{
body: 'bg-gray-900 dark:bg-gray-950'
body: 'bg-neutral-900 dark:bg-neutral-950'
}"
>
<pre class="text-sm text-gray-100 overflow-x-auto">
@@ -238,7 +238,7 @@ const resources = [
</p>
<UCard
:ui="{
body: 'bg-gray-900 dark:bg-gray-950'
body: 'bg-neutral-900 dark:bg-neutral-950'
}"
>
<pre class="text-sm text-gray-100 overflow-x-auto">

View File

@@ -0,0 +1,39 @@
import { z } from 'zod'
export default defineMcpTool({
description: 'Read a resource from the server API',
inputSchema: {
resource: z.enum([
'contact',
'education',
'experiences',
'hobbies',
'languages',
'profile',
'projects',
'skills',
'uses'
]).describe('resource name')
},
handler: async ({ resource }) => {
try {
const data = await $fetch(`/api/${resource}`)
return {
content: [{
type: 'text',
text: JSON.stringify(data, null, 2)
}]
}
}
catch (error) {
return {
content: [{
type: 'text',
text: `Error: ${error instanceof Error ? error.message : String(error)}`
}],
isError: true
}
}
}
})

64
wrangler.jsonc Normal file
View File

@@ -0,0 +1,64 @@
{
"$schema": "node_modules/wrangler/config-schema.json",
"name": "artapi",
"compatibility_date": "2025-12-13",
"compatibility_flags": [
"nodejs_compat",
],
"preview_urls": true,
"workers_dev": true,
"main": "./.output/server/index.mjs",
"routes": [
{
"pattern": "api.arthurdanjou.fr",
"zone_name": "arthurdanjou.fr",
"custom_domain": true
}
],
"placement": {
"mode": "smart",
},
"assets": {
"binding": "ASSETS",
"directory": "./.output/public/"
},
"d1_databases": [
{
"binding": "DB",
"database_id": "d6c86b05-f4aa-4dcf-8962-e0b0d538d302"
}
],
"kv_namespaces": [
{
"binding": "CACHE",
"id": "0158163e35cf4804832a38863aed8ee9",
}
],
"observability": {
"enabled": true,
"logs": {
"enabled": true,
"head_sampling_rate": 1,
"persist": true,
"invocation_logs": true
},
"traces": {
"enabled": true,
"head_sampling_rate": 1,
"persist": true
}
},
"vars": {
"STUDIO_GITHUB_CLIENT_ID": "Ov23liRJM27KxpPC6H7W",
"STUDIO_GITHUB_CLIENT_SECRET": "3dabd49c6a81c89c5531245044d78a0c27cf5171",
"NUXT_DISCORD_ID": "1208858957473644594",
"NUXT_DISCORD_TOKEN": "lET-ZxA4DXWpyp-GyY1jccdj0KQeWM-6x8LDcaiNy3_eLoda7Ae0KQcIbByaqseE55rO",
"NUXT_DISCORD_USER_ID": "179635349100691456",
"NUXT_STATUS_PAGE": "https://status.arthurdanjou.fr/api/status-page/homelab",
"NUXT_WAKATIME_CODING": "22892992-494a-4f3c-8b5e-e1061a96b6fb",
"NUXT_WAKATIME_EDITORS": "e4dd4851-00f1-4084-bafe-b2e7eb637159",
"NUXT_WAKATIME_LANGUAGES": "839cd051-8c7e-4b42-a851-bc1fb67afb0f",
"NUXT_WAKATIME_OS": "79afc5a2-2e5c-4b9b-a5ad-dbd2742eeb69",
"NUXT_WAKATIME_USER_ID": "@arthurdanjou"
}
}