artsonia-mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +34 -0
- package/.claude-plugin/plugin.json +21 -0
- package/.mcp.json +12 -0
- package/dist/bundle.js +38869 -0
- package/dist/src/auth.js +73 -0
- package/dist/src/client.js +74 -0
- package/dist/src/cookies.js +33 -0
- package/dist/src/index.js +26 -0
- package/dist/src/parse.js +144 -0
- package/dist/src/tools/fans.js +11 -0
- package/dist/src/tools/healthcheck.js +35 -0
- package/dist/src/tools/portfolio.js +27 -0
- package/dist/src/tools/students.js +14 -0
- package/dist/src/tools/writes.js +138 -0
- package/dist/src/transport-fetch.js +30 -0
- package/dist/src/transport-fetchproxy.js +36 -0
- package/dist/src/transport.js +11 -0
- package/dist/src/version.js +3 -0
- package/manifest.json +115 -0
- package/package.json +37 -0
- package/server.json +36 -0
- package/skills/artsonia-mcp/SKILL.md +96 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { readEnvVar } from '@chrischall/mcp-utils';
|
|
2
|
+
export const ARTSONIA_ORIGIN = 'https://www.artsonia.com';
|
|
3
|
+
export async function makeTransport() {
|
|
4
|
+
const mode = readEnvVar('ARTSONIA_TRANSPORT') ?? 'fetch';
|
|
5
|
+
if (mode === 'fetchproxy') {
|
|
6
|
+
const { FetchproxyArtsoniaTransport } = await import('./transport-fetchproxy.js');
|
|
7
|
+
return new FetchproxyArtsoniaTransport();
|
|
8
|
+
}
|
|
9
|
+
const { FetchArtsoniaTransport } = await import('./transport-fetch.js');
|
|
10
|
+
return new FetchArtsoniaTransport();
|
|
11
|
+
}
|
package/manifest.json
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/anthropics/dxt/main/dist/mcpb-manifest.schema.json",
|
|
3
|
+
"manifest_version": "0.3",
|
|
4
|
+
"name": "artsonia-mcp",
|
|
5
|
+
"display_name": "Artsonia",
|
|
6
|
+
"version": "0.1.0",
|
|
7
|
+
"description": "Artsonia student-art portfolios, comments, and fans for Claude — access via natural language",
|
|
8
|
+
"author": {
|
|
9
|
+
"name": "Chris Chall",
|
|
10
|
+
"email": "chris.c.hall@gmail.com",
|
|
11
|
+
"url": "https://github.com/chrischall"
|
|
12
|
+
},
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "https://github.com/chrischall/artsonia-mcp"
|
|
16
|
+
},
|
|
17
|
+
"homepage": "https://github.com/chrischall/artsonia-mcp",
|
|
18
|
+
"support": "https://github.com/chrischall/artsonia-mcp/issues",
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"keywords": [
|
|
21
|
+
"artsonia",
|
|
22
|
+
"student-art",
|
|
23
|
+
"portfolio",
|
|
24
|
+
"parent",
|
|
25
|
+
"kids"
|
|
26
|
+
],
|
|
27
|
+
"server": {
|
|
28
|
+
"type": "node",
|
|
29
|
+
"entry_point": "dist/bundle.js",
|
|
30
|
+
"mcp_config": {
|
|
31
|
+
"command": "node",
|
|
32
|
+
"args": [
|
|
33
|
+
"${__dirname}/dist/bundle.js"
|
|
34
|
+
],
|
|
35
|
+
"env": {
|
|
36
|
+
"ARTSONIA_USERNAME": "${user_config.artsonia_username}",
|
|
37
|
+
"ARTSONIA_PASSWORD": "${user_config.artsonia_password}"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"user_config": {
|
|
42
|
+
"artsonia_username": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"title": "Artsonia Username",
|
|
45
|
+
"description": "Your Artsonia login email address",
|
|
46
|
+
"required": true,
|
|
47
|
+
"sensitive": false
|
|
48
|
+
},
|
|
49
|
+
"artsonia_password": {
|
|
50
|
+
"type": "string",
|
|
51
|
+
"title": "Artsonia Password",
|
|
52
|
+
"description": "Your Artsonia account password",
|
|
53
|
+
"required": true,
|
|
54
|
+
"sensitive": true
|
|
55
|
+
},
|
|
56
|
+
"artsonia_transport": {
|
|
57
|
+
"type": "string",
|
|
58
|
+
"title": "Transport (optional)",
|
|
59
|
+
"description": "Override transport mode: 'stdio' (default), 'sse', or 'fetchproxy'",
|
|
60
|
+
"required": false,
|
|
61
|
+
"sensitive": false
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"tools": [
|
|
65
|
+
{
|
|
66
|
+
"name": "artsonia_healthcheck",
|
|
67
|
+
"description": "Check connectivity and authentication status"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"name": "artsonia_list_students",
|
|
71
|
+
"description": "List all students linked to the account"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"name": "artsonia_get_activity",
|
|
75
|
+
"description": "Get recent activity feed for a student"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"name": "artsonia_get_portfolio",
|
|
79
|
+
"description": "Get a student's art portfolio"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"name": "artsonia_get_artwork",
|
|
83
|
+
"description": "Get details for a single artwork"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"name": "artsonia_list_comments",
|
|
87
|
+
"description": "List comments on an artwork"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"name": "artsonia_get_fans",
|
|
91
|
+
"description": "Get the fan list for a student"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"name": "artsonia_post_comment",
|
|
95
|
+
"description": "Post a comment on an artwork"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"name": "artsonia_invite_fan",
|
|
99
|
+
"description": "Invite someone to become a fan of a student"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"name": "artsonia_set_notifications",
|
|
103
|
+
"description": "Update notification preferences for a student"
|
|
104
|
+
}
|
|
105
|
+
],
|
|
106
|
+
"compatibility": {
|
|
107
|
+
"platforms": [
|
|
108
|
+
"darwin",
|
|
109
|
+
"win32"
|
|
110
|
+
],
|
|
111
|
+
"runtimes": {
|
|
112
|
+
"node": ">=22.5"
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "artsonia-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"mcpName": "io.github.chrischall/artsonia-mcp",
|
|
5
|
+
"description": "Artsonia MCP server for Claude — developed and maintained by AI (Claude Code)",
|
|
6
|
+
"author": "Claude Code (AI) <https://www.anthropic.com/claude>",
|
|
7
|
+
"repository": { "type": "git", "url": "git+https://github.com/chrischall/artsonia-mcp.git" },
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"keywords": ["mcp", "model-context-protocol", "claude", "ai", "artsonia", "student-art", "portfolio", "parent"],
|
|
10
|
+
"type": "module",
|
|
11
|
+
"engines": { "node": ">=18.14" },
|
|
12
|
+
"bin": { "artsonia-mcp": "dist/index.js" },
|
|
13
|
+
"files": ["dist", ".claude-plugin", "skills", ".mcp.json", "server.json", "manifest.json"],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc && npm run bundle",
|
|
16
|
+
"bundle": "esbuild src/index.ts --bundle --platform=node --format=esm --external:dotenv --external:@fetchproxy/server --outfile=dist/bundle.js",
|
|
17
|
+
"dev": "node dist/index.js",
|
|
18
|
+
"test": "vitest run",
|
|
19
|
+
"test:watch": "vitest",
|
|
20
|
+
"test:coverage": "vitest run --coverage"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@chrischall/mcp-utils": "^0.5.0",
|
|
24
|
+
"@fetchproxy/server": "^1.2.0",
|
|
25
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
26
|
+
"dotenv": "^17.4.0",
|
|
27
|
+
"node-html-parser": "^7.0.1",
|
|
28
|
+
"zod": "^4.4.3"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@types/node": "^25.9.1",
|
|
32
|
+
"@vitest/coverage-v8": "^4.1.7",
|
|
33
|
+
"esbuild": "^0.28.0",
|
|
34
|
+
"typescript": "^6.0.3",
|
|
35
|
+
"vitest": "^4.1.7"
|
|
36
|
+
}
|
|
37
|
+
}
|
package/server.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
|
+
"name": "io.github.chrischall/artsonia-mcp",
|
|
4
|
+
"description": "Parent/fan access to Artsonia student-art portfolios, comments, and fans (AI-built).",
|
|
5
|
+
"repository": {
|
|
6
|
+
"url": "https://github.com/chrischall/artsonia-mcp",
|
|
7
|
+
"source": "github"
|
|
8
|
+
},
|
|
9
|
+
"version": "0.1.0",
|
|
10
|
+
"packages": [
|
|
11
|
+
{
|
|
12
|
+
"registryType": "npm",
|
|
13
|
+
"identifier": "artsonia-mcp",
|
|
14
|
+
"version": "0.1.0",
|
|
15
|
+
"transport": {
|
|
16
|
+
"type": "stdio"
|
|
17
|
+
},
|
|
18
|
+
"environmentVariables": [
|
|
19
|
+
{
|
|
20
|
+
"name": "ARTSONIA_USERNAME",
|
|
21
|
+
"description": "Your Artsonia login email address",
|
|
22
|
+
"isRequired": true,
|
|
23
|
+
"format": "string",
|
|
24
|
+
"isSecret": false
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "ARTSONIA_PASSWORD",
|
|
28
|
+
"description": "Your Artsonia account password",
|
|
29
|
+
"isRequired": true,
|
|
30
|
+
"format": "string",
|
|
31
|
+
"isSecret": true
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: artsonia-mcp
|
|
3
|
+
description: Access Artsonia student-art portfolios, comments, and fans via MCP. Use when the user asks about a child's artwork, wants to post an art comment, check fans, view portfolios, or manage Artsonia notifications. Triggers on phrases like "show me Emma's latest artwork", "post a comment on that painting", "who are the fans for this student", "invite grandma as a fan", or any request involving student art portfolios on Artsonia. Requires artsonia-mcp installed and the artsonia server registered (see Setup below).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# artsonia-mcp
|
|
7
|
+
|
|
8
|
+
MCP server for Artsonia — natural-language access to student-art portfolios, comments, and fans.
|
|
9
|
+
|
|
10
|
+
- **npm:** [npmjs.com/package/artsonia-mcp](https://www.npmjs.com/package/artsonia-mcp)
|
|
11
|
+
- **Source:** [github.com/chrischall/artsonia-mcp](https://github.com/chrischall/artsonia-mcp)
|
|
12
|
+
|
|
13
|
+
## Setup
|
|
14
|
+
|
|
15
|
+
### Option A — npx (recommended)
|
|
16
|
+
|
|
17
|
+
Add to `.mcp.json` in your project or `~/.claude/mcp.json`:
|
|
18
|
+
|
|
19
|
+
```json
|
|
20
|
+
{
|
|
21
|
+
"mcpServers": {
|
|
22
|
+
"artsonia": {
|
|
23
|
+
"command": "npx",
|
|
24
|
+
"args": ["-y", "artsonia-mcp"],
|
|
25
|
+
"env": {
|
|
26
|
+
"ARTSONIA_USERNAME": "your-email@example.com",
|
|
27
|
+
"ARTSONIA_PASSWORD": "your-password"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Option B — from source
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
git clone https://github.com/chrischall/artsonia-mcp
|
|
38
|
+
cd artsonia-mcp
|
|
39
|
+
npm install && npm run build
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Then add to `.mcp.json`:
|
|
43
|
+
|
|
44
|
+
```json
|
|
45
|
+
{
|
|
46
|
+
"mcpServers": {
|
|
47
|
+
"artsonia": {
|
|
48
|
+
"command": "node",
|
|
49
|
+
"args": ["/path/to/artsonia-mcp/dist/index.js"],
|
|
50
|
+
"env": {
|
|
51
|
+
"ARTSONIA_USERNAME": "your-email@example.com",
|
|
52
|
+
"ARTSONIA_PASSWORD": "your-password"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Or use a `.env` file in the project directory with `ARTSONIA_USERNAME=<value>` and `ARTSONIA_PASSWORD=<value>`.
|
|
60
|
+
|
|
61
|
+
## Authentication
|
|
62
|
+
|
|
63
|
+
Username/password auth using your Artsonia parent/fan account credentials. The server logs in and maintains a session cookie.
|
|
64
|
+
|
|
65
|
+
## Tools
|
|
66
|
+
|
|
67
|
+
### Core
|
|
68
|
+
| Tool | Description |
|
|
69
|
+
|------|-------------|
|
|
70
|
+
| `artsonia_healthcheck` | Check connectivity and authentication status |
|
|
71
|
+
| `artsonia_list_students` | List all students linked to the account |
|
|
72
|
+
|
|
73
|
+
### Portfolio & Artwork
|
|
74
|
+
| Tool | Description |
|
|
75
|
+
|------|-------------|
|
|
76
|
+
| `artsonia_get_activity` | Get recent activity feed for a student |
|
|
77
|
+
| `artsonia_get_portfolio` | Get a student's art portfolio |
|
|
78
|
+
| `artsonia_get_artwork` | Get details for a single artwork |
|
|
79
|
+
|
|
80
|
+
### Social
|
|
81
|
+
| Tool | Description |
|
|
82
|
+
|------|-------------|
|
|
83
|
+
| `artsonia_list_comments` | List comments on an artwork |
|
|
84
|
+
| `artsonia_get_fans` | Get the fan list for a student |
|
|
85
|
+
| `artsonia_post_comment` | Post a comment on an artwork |
|
|
86
|
+
| `artsonia_invite_fan` | Invite someone to become a fan of a student |
|
|
87
|
+
| `artsonia_set_notifications` | Update notification preferences for a student |
|
|
88
|
+
|
|
89
|
+
## Environment Variables
|
|
90
|
+
|
|
91
|
+
| Variable | Required | Description |
|
|
92
|
+
|----------|----------|-------------|
|
|
93
|
+
| `ARTSONIA_USERNAME` | Yes | Your Artsonia login email address |
|
|
94
|
+
| `ARTSONIA_PASSWORD` | Yes | Your Artsonia account password |
|
|
95
|
+
| `ARTSONIA_TRANSPORT` | No | Override transport: `stdio` (default), `sse`, or `fetchproxy` |
|
|
96
|
+
| `ARTSONIA_WS_PORT` | No | WebSocket port when using `sse` transport |
|