mirror of
https://github.com/ArthurDanjou/artapi.git
synced 2026-01-23 13:20:26 +01:00
Compare commits
3 Commits
master
...
606cd218bf
| Author | SHA1 | Date | |
|---|---|---|---|
| 606cd218bf | |||
| 94858f9f4d | |||
| 7394888495 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -24,5 +24,4 @@ logs
|
|||||||
.env.*
|
.env.*
|
||||||
!.env.example
|
!.env.example
|
||||||
|
|
||||||
.wrangler
|
.wrangler
|
||||||
wrangler.jsonc
|
|
||||||
@@ -76,7 +76,7 @@ const apiEndpoints = [
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<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 -->
|
<!-- Hero Header -->
|
||||||
<div class="bg-linear-to-br from-primary to-primary-600 dark:from-primary-900 dark:to-primary-800">
|
<div class="bg-linear-to-br from-primary to-primary-600 dark:from-primary-900 dark:to-primary-800">
|
||||||
<UContainer class="py-16">
|
<UContainer class="py-16">
|
||||||
@@ -224,7 +224,7 @@ const apiEndpoints = [
|
|||||||
</h3>
|
</h3>
|
||||||
<UCard
|
<UCard
|
||||||
:ui="{
|
: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">
|
<pre class="text-sm text-gray-100 overflow-x-auto">
|
||||||
@@ -245,7 +245,7 @@ const apiEndpoints = [
|
|||||||
</h3>
|
</h3>
|
||||||
<UCard
|
<UCard
|
||||||
:ui="{
|
: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>
|
<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 }}
|
{{ resource.title }}
|
||||||
</h3>
|
</h3>
|
||||||
</div>
|
</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 }}
|
{{ resource.uri }}
|
||||||
</code>
|
</code>
|
||||||
<p class="text-sm text-gray-600 dark:text-gray-400">
|
<p class="text-sm text-gray-600 dark:text-gray-400">
|
||||||
@@ -408,7 +408,7 @@ const apiEndpoints = [
|
|||||||
<div
|
<div
|
||||||
v-for="endpoint in apiEndpoints"
|
v-for="endpoint in apiEndpoints"
|
||||||
:key="endpoint.path"
|
: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
|
<UBadge
|
||||||
color="success"
|
color="success"
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ const resources = [
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<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 -->
|
<!-- Hero Section -->
|
||||||
<UContainer class="py-16 sm:py-24">
|
<UContainer class="py-16 sm:py-24">
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
@@ -181,7 +181,7 @@ const resources = [
|
|||||||
size="lg"
|
size="lg"
|
||||||
block
|
block
|
||||||
:ui="{
|
: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">
|
<div class="flex flex-col items-center gap-2">
|
||||||
@@ -213,7 +213,7 @@ const resources = [
|
|||||||
</p>
|
</p>
|
||||||
<UCard
|
<UCard
|
||||||
:ui="{
|
: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">
|
<pre class="text-sm text-gray-100 overflow-x-auto">
|
||||||
@@ -238,7 +238,7 @@ const resources = [
|
|||||||
</p>
|
</p>
|
||||||
<UCard
|
<UCard
|
||||||
:ui="{
|
: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">
|
<pre class="text-sm text-gray-100 overflow-x-auto">
|
||||||
|
|||||||
39
server/mcp/tools/read-resource.ts
Normal file
39
server/mcp/tools/read-resource.ts
Normal 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
64
wrangler.jsonc
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user