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.
@@ -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
+ }
@@ -0,0 +1,3 @@
1
+ // Single source of truth for the server version. The marker is what
2
+ // release-please bumps; versionSyncTest asserts it equals package.json.
3
+ export const VERSION = '0.1.0'; // x-release-please-version
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 |