aimeat 1.10.0 → 1.12.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/README.md +4 -0
- package/dist/.env.example +31 -0
- package/dist/bin/aimeat.js +0 -0
- package/dist/locales/en.json +45 -0
- package/dist/locales/fi.json +45 -0
- package/dist/public/connect.fi.html +350 -0
- package/dist/public/connect.html +353 -0
- package/dist/public/css/views/agents-detail.css +108 -0
- package/dist/public/privacy.fi.html +246 -0
- package/dist/public/privacy.html +246 -0
- package/dist/public/views/profile/agents/agent-card.js +22 -2
- package/dist/public/views/profile/agents-tab.js +162 -17
- package/dist/scripts/audit-mcp-tools.d.ts +1 -0
- package/dist/scripts/audit-mcp-tools.d.ts.map +1 -1
- package/dist/scripts/audit-mcp-tools.js +19 -0
- package/dist/scripts/audit-mcp-tools.js.map +1 -1
- package/dist/src/cli/connect/agent-registry.d.ts +51 -0
- package/dist/src/cli/connect/agent-registry.d.ts.map +1 -0
- package/dist/src/cli/connect/agent-registry.js +84 -0
- package/dist/src/cli/connect/agent-registry.js.map +1 -0
- package/dist/src/cli/connect/auth.d.ts.map +1 -1
- package/dist/src/cli/connect/auth.js +27 -3
- package/dist/src/cli/connect/auth.js.map +1 -1
- package/dist/src/cli/connect/config.d.ts +82 -6
- package/dist/src/cli/connect/config.d.ts.map +1 -1
- package/dist/src/cli/connect/config.js +76 -1
- package/dist/src/cli/connect/config.js.map +1 -1
- package/dist/src/cli/connect/keychain.d.ts +10 -0
- package/dist/src/cli/connect/keychain.d.ts.map +1 -1
- package/dist/src/cli/connect/keychain.js +45 -3
- package/dist/src/cli/connect/keychain.js.map +1 -1
- package/dist/src/cli/connect/mcp/poller.d.ts +19 -13
- package/dist/src/cli/connect/mcp/poller.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/poller.js +52 -15
- package/dist/src/cli/connect/mcp/poller.js.map +1 -1
- package/dist/src/cli/connect/mcp/resources.d.ts +10 -4
- package/dist/src/cli/connect/mcp/resources.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/resources.js +5 -7
- package/dist/src/cli/connect/mcp/resources.js.map +1 -1
- package/dist/src/cli/connect/mcp/server.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/server.js +42 -21
- package/dist/src/cli/connect/mcp/server.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/_registry.d.ts +15 -0
- package/dist/src/cli/connect/mcp/tools/_registry.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/_registry.js +19 -0
- package/dist/src/cli/connect/mcp/tools/_registry.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/agent-caps.d.ts +6 -2
- package/dist/src/cli/connect/mcp/tools/agent-caps.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/agent-caps.js +12 -4
- package/dist/src/cli/connect/mcp/tools/agent-caps.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/agent-management.d.ts +18 -0
- package/dist/src/cli/connect/mcp/tools/agent-management.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/agent-management.js +23 -0
- package/dist/src/cli/connect/mcp/tools/agent-management.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/agent-messages.d.ts +7 -3
- package/dist/src/cli/connect/mcp/tools/agent-messages.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/agent-messages.js +12 -4
- package/dist/src/cli/connect/mcp/tools/agent-messages.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts +13 -7
- package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/agent-tasks.js +31 -9
- package/dist/src/cli/connect/mcp/tools/agent-tasks.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/agent-telemetry.d.ts +7 -3
- package/dist/src/cli/connect/mcp/tools/agent-telemetry.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/agent-telemetry.js +8 -4
- package/dist/src/cli/connect/mcp/tools/agent-telemetry.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/apps.d.ts +5 -2
- package/dist/src/cli/connect/mcp/tools/apps.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/apps.js +8 -6
- package/dist/src/cli/connect/mcp/tools/apps.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/boards.d.ts +5 -2
- package/dist/src/cli/connect/mcp/tools/boards.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/boards.js +10 -8
- package/dist/src/cli/connect/mcp/tools/boards.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/capabilities.d.ts +5 -2
- package/dist/src/cli/connect/mcp/tools/capabilities.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/capabilities.js +10 -8
- package/dist/src/cli/connect/mcp/tools/capabilities.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/catalogue.d.ts +5 -2
- package/dist/src/cli/connect/mcp/tools/catalogue.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/catalogue.js +6 -4
- package/dist/src/cli/connect/mcp/tools/catalogue.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/consent.d.ts +5 -2
- package/dist/src/cli/connect/mcp/tools/consent.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/consent.js +6 -4
- package/dist/src/cli/connect/mcp/tools/consent.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/core.d.ts +4 -2
- package/dist/src/cli/connect/mcp/tools/core.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/core.js +23 -19
- package/dist/src/cli/connect/mcp/tools/core.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/cortex.d.ts +5 -2
- package/dist/src/cli/connect/mcp/tools/cortex.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/cortex.js +8 -6
- package/dist/src/cli/connect/mcp/tools/cortex.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/extensions.d.ts +5 -2
- package/dist/src/cli/connect/mcp/tools/extensions.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/extensions.js +10 -8
- package/dist/src/cli/connect/mcp/tools/extensions.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/flags.d.ts +5 -2
- package/dist/src/cli/connect/mcp/tools/flags.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/flags.js +4 -2
- package/dist/src/cli/connect/mcp/tools/flags.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/groups.d.ts +5 -2
- package/dist/src/cli/connect/mcp/tools/groups.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/groups.js +8 -6
- package/dist/src/cli/connect/mcp/tools/groups.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/handbook.d.ts +5 -2
- package/dist/src/cli/connect/mcp/tools/handbook.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/handbook.js +4 -2
- package/dist/src/cli/connect/mcp/tools/handbook.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/index.d.ts +10 -6
- package/dist/src/cli/connect/mcp/tools/index.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/index.js +24 -22
- package/dist/src/cli/connect/mcp/tools/index.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/instances.d.ts +5 -2
- package/dist/src/cli/connect/mcp/tools/instances.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/instances.js +6 -4
- package/dist/src/cli/connect/mcp/tools/instances.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/knowledge.d.ts +5 -2
- package/dist/src/cli/connect/mcp/tools/knowledge.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/knowledge.js +7 -5
- package/dist/src/cli/connect/mcp/tools/knowledge.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/memory-ext.d.ts +5 -2
- package/dist/src/cli/connect/mcp/tools/memory-ext.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/memory-ext.js +4 -2
- package/dist/src/cli/connect/mcp/tools/memory-ext.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/onboarding.d.ts +8 -4
- package/dist/src/cli/connect/mcp/tools/onboarding.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/onboarding.js +24 -7
- package/dist/src/cli/connect/mcp/tools/onboarding.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/organisms.d.ts +5 -2
- package/dist/src/cli/connect/mcp/tools/organisms.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/organisms.js +8 -6
- package/dist/src/cli/connect/mcp/tools/organisms.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/wallet-ext.d.ts +5 -2
- package/dist/src/cli/connect/mcp/tools/wallet-ext.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/wallet-ext.js +4 -2
- package/dist/src/cli/connect/mcp/tools/wallet-ext.js.map +1 -1
- package/dist/src/cli/connect/task-runner.d.ts +15 -0
- package/dist/src/cli/connect/task-runner.d.ts.map +1 -0
- package/dist/src/cli/connect/task-runner.js +214 -0
- package/dist/src/cli/connect/task-runner.js.map +1 -0
- package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call.js +33 -0
- package/dist/src/cli/connect/tool-call.js.map +1 -1
- package/dist/src/cli/init-wizard.d.ts.map +1 -1
- package/dist/src/cli/init-wizard.js +137 -0
- package/dist/src/cli/init-wizard.js.map +1 -1
- package/dist/src/config.d.ts +56 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +73 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/index.js +95 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/agent-capabilities.d.ts +2 -0
- package/dist/src/mcp/agent-capabilities.d.ts.map +1 -1
- package/dist/src/mcp/agent-capabilities.js +5 -2
- package/dist/src/mcp/agent-capabilities.js.map +1 -1
- package/dist/src/mcp/agent-messages.d.ts +2 -0
- package/dist/src/mcp/agent-messages.d.ts.map +1 -1
- package/dist/src/mcp/agent-messages.js +5 -2
- package/dist/src/mcp/agent-messages.js.map +1 -1
- package/dist/src/mcp/agent-onboarding.d.ts +2 -0
- package/dist/src/mcp/agent-onboarding.d.ts.map +1 -1
- package/dist/src/mcp/agent-onboarding.js +8 -5
- package/dist/src/mcp/agent-onboarding.js.map +1 -1
- package/dist/src/mcp/agent-tasks.d.ts +2 -0
- package/dist/src/mcp/agent-tasks.d.ts.map +1 -1
- package/dist/src/mcp/agent-tasks.js +10 -7
- package/dist/src/mcp/agent-tasks.js.map +1 -1
- package/dist/src/mcp/agent-telemetry.d.ts +2 -0
- package/dist/src/mcp/agent-telemetry.d.ts.map +1 -1
- package/dist/src/mcp/agent-telemetry.js +4 -1
- package/dist/src/mcp/agent-telemetry.js.map +1 -1
- package/dist/src/mcp/annotations.d.ts +49 -0
- package/dist/src/mcp/annotations.d.ts.map +1 -0
- package/dist/src/mcp/annotations.js +175 -0
- package/dist/src/mcp/annotations.js.map +1 -0
- package/dist/src/mcp/apps.d.ts +2 -0
- package/dist/src/mcp/apps.d.ts.map +1 -1
- package/dist/src/mcp/apps.js +8 -5
- package/dist/src/mcp/apps.js.map +1 -1
- package/dist/src/mcp/boards.d.ts +2 -0
- package/dist/src/mcp/boards.d.ts.map +1 -1
- package/dist/src/mcp/boards.js +10 -7
- package/dist/src/mcp/boards.js.map +1 -1
- package/dist/src/mcp/capabilities.d.ts +2 -0
- package/dist/src/mcp/capabilities.d.ts.map +1 -1
- package/dist/src/mcp/capabilities.js +8 -7
- package/dist/src/mcp/capabilities.js.map +1 -1
- package/dist/src/mcp/catalogue.d.ts +2 -0
- package/dist/src/mcp/catalogue.d.ts.map +1 -1
- package/dist/src/mcp/catalogue.js +6 -3
- package/dist/src/mcp/catalogue.js.map +1 -1
- package/dist/src/mcp/chat-instances.d.ts +2 -0
- package/dist/src/mcp/chat-instances.d.ts.map +1 -1
- package/dist/src/mcp/chat-instances.js +6 -3
- package/dist/src/mcp/chat-instances.js.map +1 -1
- package/dist/src/mcp/consent.d.ts +2 -0
- package/dist/src/mcp/consent.d.ts.map +1 -1
- package/dist/src/mcp/consent.js +6 -3
- package/dist/src/mcp/consent.js.map +1 -1
- package/dist/src/mcp/core.d.ts +2 -0
- package/dist/src/mcp/core.d.ts.map +1 -1
- package/dist/src/mcp/core.js +21 -18
- package/dist/src/mcp/core.js.map +1 -1
- package/dist/src/mcp/cortex.d.ts +2 -0
- package/dist/src/mcp/cortex.d.ts.map +1 -1
- package/dist/src/mcp/cortex.js +8 -5
- package/dist/src/mcp/cortex.js.map +1 -1
- package/dist/src/mcp/extensions.d.ts +2 -0
- package/dist/src/mcp/extensions.d.ts.map +1 -1
- package/dist/src/mcp/extensions.js +10 -7
- package/dist/src/mcp/extensions.js.map +1 -1
- package/dist/src/mcp/flags.d.ts +2 -0
- package/dist/src/mcp/flags.d.ts.map +1 -1
- package/dist/src/mcp/flags.js +4 -1
- package/dist/src/mcp/flags.js.map +1 -1
- package/dist/src/mcp/knowledge.d.ts +2 -0
- package/dist/src/mcp/knowledge.d.ts.map +1 -1
- package/dist/src/mcp/knowledge.js +7 -4
- package/dist/src/mcp/knowledge.js.map +1 -1
- package/dist/src/mcp/memory-extended.d.ts +2 -0
- package/dist/src/mcp/memory-extended.d.ts.map +1 -1
- package/dist/src/mcp/memory-extended.js +5 -2
- package/dist/src/mcp/memory-extended.js.map +1 -1
- package/dist/src/mcp/organisms.d.ts +2 -0
- package/dist/src/mcp/organisms.d.ts.map +1 -1
- package/dist/src/mcp/organisms.js +8 -5
- package/dist/src/mcp/organisms.js.map +1 -1
- package/dist/src/mcp/prompts.d.ts +2 -0
- package/dist/src/mcp/prompts.d.ts.map +1 -1
- package/dist/src/mcp/prompts.js +4 -1
- package/dist/src/mcp/prompts.js.map +1 -1
- package/dist/src/mcp/sharing-groups.d.ts +2 -0
- package/dist/src/mcp/sharing-groups.d.ts.map +1 -1
- package/dist/src/mcp/sharing-groups.js +8 -5
- package/dist/src/mcp/sharing-groups.js.map +1 -1
- package/dist/src/mcp/wallet-extended.d.ts +2 -0
- package/dist/src/mcp/wallet-extended.d.ts.map +1 -1
- package/dist/src/mcp/wallet-extended.js +4 -1
- package/dist/src/mcp/wallet-extended.js.map +1 -1
- package/dist/src/models/agent-onboarding-schemas.d.ts +18 -1
- package/dist/src/models/agent-onboarding-schemas.d.ts.map +1 -1
- package/dist/src/models/agent-onboarding-schemas.js +36 -2
- package/dist/src/models/agent-onboarding-schemas.js.map +1 -1
- package/dist/src/models/schemas.d.ts +6 -0
- package/dist/src/models/schemas.d.ts.map +1 -1
- package/dist/src/models/schemas.js +1 -0
- package/dist/src/models/schemas.js.map +1 -1
- package/dist/src/routes/agent-onboarding.d.ts.map +1 -1
- package/dist/src/routes/agent-onboarding.js +40 -30
- package/dist/src/routes/agent-onboarding.js.map +1 -1
- package/dist/src/routes/agents.d.ts.map +1 -1
- package/dist/src/routes/agents.js +74 -24
- package/dist/src/routes/agents.js.map +1 -1
- package/dist/src/routes/portal.d.ts +7 -0
- package/dist/src/routes/portal.d.ts.map +1 -1
- package/dist/src/routes/portal.js +121 -0
- package/dist/src/routes/portal.js.map +1 -1
- package/dist/src/server-bootstrap/static-files.d.ts +16 -0
- package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
- package/dist/src/server-bootstrap/static-files.js +32 -3
- package/dist/src/server-bootstrap/static-files.js.map +1 -1
- package/dist/src/storage/interface.d.ts +10 -0
- package/dist/src/storage/interface.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.js +2 -1
- package/dist/src/storage/providers/mongodb/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/index.js +6 -4
- package/dist/src/storage/providers/sqlite/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.js +4 -0
- package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
- package/package.json +98 -78
- package/prisma/schema.prisma +1 -0
package/README.md
CHANGED
|
@@ -145,6 +145,10 @@ npx aimeat connect --url https://your-node --owner your-handle [--agent name]
|
|
|
145
145
|
|
|
146
146
|
For MCP-capable runtimes (Claude Desktop, MCP-aware IDEs), run `aimeat connect serve` afterwards to attach the AIMEAT toolset over stdio. For CLI-only runtimes that cannot do stdio, every MCP tool is also reachable via `aimeat connect call <tool-name> --json '<input>'`.
|
|
147
147
|
|
|
148
|
+
**Multi-agent connector.** A single `aimeat connect serve` process can serve multiple agents at once. Add more agents with `aimeat connect add --agent <name> --url ... --owner ...`; list them with `aimeat connect list`; remove with `aimeat connect remove <name>`. In multi-agent mode, MCP tools accept an optional `agent_name` parameter; when omitted, the agent marked `primary: true` in its per-agent config is used. This is the path for connecting one interactive agent (Claude Code) plus several **task-runner** agents (e.g. CrewAI crews) from one connector process -- see [docs/integrations/crewai.md](docs/integrations/crewai.md) for the task-runner pattern.
|
|
149
|
+
|
|
150
|
+
**Agent modes.** Every agent declares a mode at registration: `autonomous` (continuous), `interactive` (chat/IDE, default), `task-runner` (triggered, runs one task, exits), or `coordinator` (orchestrates others). Mode picks the Hello Integration flow -- `task-runner` agents get a reduced 5-step onboarding instead of the full 13 because they have no interactive command surface. Combine modes with owner-managed **tags** (`crew:*`, `source:*`, `role:*`, `project:*`) for filtering and grouping in the profile UI. Details: [docs/coding-guidelines/agent-tags.md](docs/coding-guidelines/agent-tags.md).
|
|
151
|
+
|
|
148
152
|
**2. Copy the prompt from your profile.** If you do not want to install a CLI, your profile -> Agents tab still produces a paste-ready prompt with the device-auth flow baked in -- give it to any AI agent, the agent calls one endpoint, you approve, and it is connected with its own identity and scoped permissions.
|
|
149
153
|
|
|
150
154
|
Claude Pro, ChatGPT Plus, and other MCP-capable AIs connect directly as MCP clients. OpenClaw, Hermes, Claude Code, and Cursor all work. Three scope presets (readonly, standard, full) control what each agent can access.
|
package/dist/.env.example
CHANGED
|
@@ -35,8 +35,39 @@ AIMEAT_PORT=40050
|
|
|
35
35
|
# Startup logs will show the anonymous prompt URL and share prompt URL.
|
|
36
36
|
# AIMEAT_ANONYMOUS=false
|
|
37
37
|
# CORS: comma-separated list of allowed origins, or * for all (default: *)
|
|
38
|
+
# By architecture, AIMEAT accepts requests from any origin -- the platform
|
|
39
|
+
# is Bearer-token-only (OAuth 2.1), no cookies, so CORS is not the protection
|
|
40
|
+
# layer. Apps published on the network attach from arbitrary browser origins.
|
|
41
|
+
# Set this only if you specifically want to restrict which origins can attach.
|
|
38
42
|
# AIMEAT_CORS_ALLOWED_ORIGINS=*
|
|
39
43
|
# AIMEAT_CORS_ALLOWED_ORIGINS=https://portal.aimeat.fi,https://my-app.example.com
|
|
44
|
+
|
|
45
|
+
# ── Operator info (REQUIRED for /v1/privacy page) ──────────────
|
|
46
|
+
# These fields identify the operator of THIS node as the GDPR data controller.
|
|
47
|
+
# Every AIMEAT node must fill them in -- otherwise /v1/privacy returns 503
|
|
48
|
+
# "Privacy policy not configured" so the operator is forced to address it
|
|
49
|
+
# before going public. Do NOT ship a deployment that names someone else.
|
|
50
|
+
#
|
|
51
|
+
# Privacy policy template substitution: these env vars feed {{placeholder}}
|
|
52
|
+
# tokens in aimeat/public/privacy.html and privacy.fi.html at render time.
|
|
53
|
+
#
|
|
54
|
+
# REQUIRED:
|
|
55
|
+
# AIMEAT_OPERATOR_NAME="Your Name or Company Ltd"
|
|
56
|
+
# AIMEAT_OPERATOR_ADDRESS="Street, Postcode City, Country"
|
|
57
|
+
# AIMEAT_OPERATOR_COUNTRY="Finland"
|
|
58
|
+
# AIMEAT_OPERATOR_EMAIL="privacy@example.com"
|
|
59
|
+
# AIMEAT_OPERATOR_HOSTING_NAME="Scaleway SAS"
|
|
60
|
+
# AIMEAT_OPERATOR_HOSTING_LOCATION="France (EU/EEA)"
|
|
61
|
+
# AIMEAT_OPERATOR_SUPERVISORY_NAME="Office of the Data Protection Ombudsman"
|
|
62
|
+
# AIMEAT_OPERATOR_SUPERVISORY_URL="https://tietosuoja.fi"
|
|
63
|
+
# AIMEAT_OPERATOR_EFFECTIVE_DATE="2026-05-29"
|
|
64
|
+
#
|
|
65
|
+
# OPTIONAL:
|
|
66
|
+
# AIMEAT_OPERATOR_TYPE="natural_person" # natural_person | company | organisation | association
|
|
67
|
+
# AIMEAT_OPERATOR_SECURITY_EMAIL="" # defaults to AIMEAT_OPERATOR_EMAIL
|
|
68
|
+
# AIMEAT_OPERATOR_HOSTING_URL="" # hyperlink to your hosting provider
|
|
69
|
+
# AIMEAT_OPERATOR_POLICY_VERSION="1.0"
|
|
70
|
+
|
|
40
71
|
# ── Security Limits ────────────────────────────────────────────
|
|
41
72
|
# AIMEAT_LOGIN_RATE_LIMIT_MAX=15 # Max login attempts per window (default: 15)
|
|
42
73
|
# AIMEAT_LOGIN_RATE_LIMIT_WINDOW_MS=60000 # Login rate limit window in ms (default: 60s)
|
package/dist/bin/aimeat.js
CHANGED
|
File without changes
|
package/dist/locales/en.json
CHANGED
|
@@ -367,6 +367,23 @@
|
|
|
367
367
|
"denied": "Request denied",
|
|
368
368
|
"approveError": "Failed to approve agent"
|
|
369
369
|
},
|
|
370
|
+
"mode": {
|
|
371
|
+
"autonomous": "Autonomous",
|
|
372
|
+
"interactive": "Interactive",
|
|
373
|
+
"task-runner": "Task runner",
|
|
374
|
+
"coordinator": "Coordinator",
|
|
375
|
+
"tooltip": "Operational mode — affects how the agent is onboarded and how it consumes work."
|
|
376
|
+
},
|
|
377
|
+
"filter": {
|
|
378
|
+
"byTag": "Filter by tag:",
|
|
379
|
+
"groupBy": "Group by:",
|
|
380
|
+
"groupByNone": "No grouping",
|
|
381
|
+
"groupByTag": "Tag",
|
|
382
|
+
"groupByMode": "Mode",
|
|
383
|
+
"clear": "Clear",
|
|
384
|
+
"untagged": "Untagged",
|
|
385
|
+
"noMatches": "No agents match the current filter."
|
|
386
|
+
},
|
|
370
387
|
"approval": {
|
|
371
388
|
"credentials_ready_title": "Agent approved",
|
|
372
389
|
"credentials_ready_desc": "Copy the credentials below and paste them to your agent.",
|
|
@@ -2626,6 +2643,34 @@
|
|
|
2626
2643
|
"existingMerge": "Merge (keep existing, add new)",
|
|
2627
2644
|
"existingOverwrite": "Overwrite",
|
|
2628
2645
|
"existingCancel": "Cancel",
|
|
2646
|
+
"operatorTitle": "Operator info (privacy policy)",
|
|
2647
|
+
"operatorIntro": "AIMEAT renders a privacy policy at /v1/privacy with the operator's identity. This is required by GDPR for any node serving users. The next prompts collect the legal fields. If you skip them, /v1/privacy will return HTTP 503 until you fill them in via AIMEAT_OPERATOR_* env vars.",
|
|
2648
|
+
"operatorPersonalAsk": "This is a personal node — set up privacy policy details now? (recommended if anyone else might use this node)",
|
|
2649
|
+
"operatorName": "Legal name (the controller)",
|
|
2650
|
+
"operatorNameRequired": "Operator name is required",
|
|
2651
|
+
"operatorType": "Operator type",
|
|
2652
|
+
"operatorTypeNaturalPerson": "Natural person (individual)",
|
|
2653
|
+
"operatorTypeCompany": "Company",
|
|
2654
|
+
"operatorTypeOrganisation": "Organisation",
|
|
2655
|
+
"operatorTypeAssociation": "Association",
|
|
2656
|
+
"operatorAddress": "Postal address (required by GDPR for the controller)",
|
|
2657
|
+
"operatorAddressRequired": "Postal address is required",
|
|
2658
|
+
"operatorCountry": "Country of operation",
|
|
2659
|
+
"operatorCountryRequired": "Country is required",
|
|
2660
|
+
"operatorEmail": "Privacy contact email",
|
|
2661
|
+
"operatorEmailRequired": "Privacy email is required",
|
|
2662
|
+
"operatorEmailInvalid": "Must be a valid email address",
|
|
2663
|
+
"operatorSecurityEmail": "Security contact email (leave empty to reuse the privacy email)",
|
|
2664
|
+
"operatorHostingName": "Hosting provider name",
|
|
2665
|
+
"operatorHostingNameRequired": "Hosting provider name is required",
|
|
2666
|
+
"operatorHostingUrl": "Hosting provider URL (optional, for the privacy-page link)",
|
|
2667
|
+
"operatorHostingLocation": "Hosting location (e.g. France (EU/EEA))",
|
|
2668
|
+
"operatorHostingLocationRequired": "Hosting location is required",
|
|
2669
|
+
"operatorSupervisoryName": "Data protection supervisory authority (in your jurisdiction)",
|
|
2670
|
+
"operatorSupervisoryNameRequired": "Supervisory authority name is required",
|
|
2671
|
+
"operatorSupervisoryUrl": "Supervisory authority URL",
|
|
2672
|
+
"operatorSupervisoryUrlRequired": "Supervisory authority URL is required",
|
|
2673
|
+
"operatorEffectiveDate": "Privacy policy effective date (YYYY-MM-DD)",
|
|
2629
2674
|
"summaryTitle": "Configuration Summary",
|
|
2630
2675
|
"summaryChanged": "Changed from default:",
|
|
2631
2676
|
"summaryDefault": "All other settings use defaults.",
|
package/dist/locales/fi.json
CHANGED
|
@@ -367,6 +367,23 @@
|
|
|
367
367
|
"denied": "Pyyntö hylätty",
|
|
368
368
|
"approveError": "Agentin hyväksyminen epäonnistui"
|
|
369
369
|
},
|
|
370
|
+
"mode": {
|
|
371
|
+
"autonomous": "Autonominen",
|
|
372
|
+
"interactive": "Interaktiivinen",
|
|
373
|
+
"task-runner": "Tehtäväajuri",
|
|
374
|
+
"coordinator": "Koordinaattori",
|
|
375
|
+
"tooltip": "Toimintatila — vaikuttaa siihen, miten agentti läpäisee Hello Integrationin ja kuluttaa työtä."
|
|
376
|
+
},
|
|
377
|
+
"filter": {
|
|
378
|
+
"byTag": "Suodata tagilla:",
|
|
379
|
+
"groupBy": "Ryhmittele:",
|
|
380
|
+
"groupByNone": "Ei ryhmittelyä",
|
|
381
|
+
"groupByTag": "Tagin mukaan",
|
|
382
|
+
"groupByMode": "Tilan mukaan",
|
|
383
|
+
"clear": "Tyhjennä",
|
|
384
|
+
"untagged": "Ei tageja",
|
|
385
|
+
"noMatches": "Yksikään agentti ei vastaa nykyistä suodatinta."
|
|
386
|
+
},
|
|
370
387
|
"approval": {
|
|
371
388
|
"credentials_ready_title": "Agentti hyväksytty",
|
|
372
389
|
"credentials_ready_desc": "Kopioi alla olevat tunnistetiedot ja liitä ne agentillesi.",
|
|
@@ -2626,6 +2643,34 @@
|
|
|
2626
2643
|
"existingMerge": "Yhdistä (säilytä olemassaolevat, lisää uudet)",
|
|
2627
2644
|
"existingOverwrite": "Korvaa",
|
|
2628
2645
|
"existingCancel": "Peruuta",
|
|
2646
|
+
"operatorTitle": "Ylläpitäjän tiedot (tietosuojaseloste)",
|
|
2647
|
+
"operatorIntro": "AIMEAT renderöi tietosuojaselosteen osoitteessa /v1/privacy ylläpitäjän tiedoilla. GDPR vaatii tämän kaikilta käyttäjiä palvelevilta solmuilta. Seuraavat kysymykset keräävät lakisääteiset kentät. Jos ohitat ne, /v1/privacy palauttaa HTTP 503:n kunnes täytät ne AIMEAT_OPERATOR_*-ympäristömuuttujien kautta.",
|
|
2648
|
+
"operatorPersonalAsk": "Tämä on henkilökohtainen solmu — määritä tietosuojaselosteen tiedot nyt? (suositeltavaa jos joku muu saattaa käyttää tätä solmua)",
|
|
2649
|
+
"operatorName": "Virallinen nimi (rekisterinpitäjä)",
|
|
2650
|
+
"operatorNameRequired": "Ylläpitäjän nimi on pakollinen",
|
|
2651
|
+
"operatorType": "Ylläpitäjän tyyppi",
|
|
2652
|
+
"operatorTypeNaturalPerson": "Luonnollinen henkilö (yksityishenkilö)",
|
|
2653
|
+
"operatorTypeCompany": "Yritys",
|
|
2654
|
+
"operatorTypeOrganisation": "Organisaatio",
|
|
2655
|
+
"operatorTypeAssociation": "Yhdistys",
|
|
2656
|
+
"operatorAddress": "Postiosoite (GDPR edellyttää rekisterinpitäjältä)",
|
|
2657
|
+
"operatorAddressRequired": "Postiosoite on pakollinen",
|
|
2658
|
+
"operatorCountry": "Toimintamaa",
|
|
2659
|
+
"operatorCountryRequired": "Maa on pakollinen",
|
|
2660
|
+
"operatorEmail": "Tietosuojayhteyssähköposti",
|
|
2661
|
+
"operatorEmailRequired": "Tietosuojasähköposti on pakollinen",
|
|
2662
|
+
"operatorEmailInvalid": "Sähköpostin pitää olla kelvollinen",
|
|
2663
|
+
"operatorSecurityEmail": "Tietoturvasähköposti (tyhjä = sama kuin tietosuojasähköposti)",
|
|
2664
|
+
"operatorHostingName": "Hosting-palveluntarjoaja",
|
|
2665
|
+
"operatorHostingNameRequired": "Hosting-palveluntarjoajan nimi on pakollinen",
|
|
2666
|
+
"operatorHostingUrl": "Hosting-palveluntarjoajan URL (valinnainen, linkkiä varten)",
|
|
2667
|
+
"operatorHostingLocation": "Hosting-sijainti (esim. Ranska (EU/ETA))",
|
|
2668
|
+
"operatorHostingLocationRequired": "Hosting-sijainti on pakollinen",
|
|
2669
|
+
"operatorSupervisoryName": "Tietosuojaviranomainen (omalla lainkäyttöalueellasi)",
|
|
2670
|
+
"operatorSupervisoryNameRequired": "Tietosuojaviranomaisen nimi on pakollinen",
|
|
2671
|
+
"operatorSupervisoryUrl": "Tietosuojaviranomaisen URL",
|
|
2672
|
+
"operatorSupervisoryUrlRequired": "Tietosuojaviranomaisen URL on pakollinen",
|
|
2673
|
+
"operatorEffectiveDate": "Tietosuojaselosteen voimaantulopäivä (YYYY-MM-DD)",
|
|
2629
2674
|
"summaryTitle": "Asetusten yhteenveto",
|
|
2630
2675
|
"summaryChanged": "Muutettu oletuksesta:",
|
|
2631
2676
|
"summaryDefault": "Kaikki muut asetukset käyttävät oletuksia.",
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="fi">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Liitä AIMEAT tekoälyysi — Claude, Cursor, VS Code, ChatGPT</title>
|
|
7
|
+
<meta name="description" content="Liitä AIMEAT Claude Desktopiin, claude.ai:hin, Cursoriin, Claude Codeen tai VS Code Copilotiin alle minuutissa. Pysyvä muisti ja kyvykkyydet kaikille MCP-yhteensopiville tekoälyille.">
|
|
8
|
+
<meta name="robots" content="index,follow">
|
|
9
|
+
<link rel="canonical" href="https://aimeat.io/v1/connect/fi">
|
|
10
|
+
<link rel="alternate" hreflang="en" href="https://aimeat.io/v1/connect">
|
|
11
|
+
<link rel="alternate" hreflang="fi" href="https://aimeat.io/v1/connect/fi">
|
|
12
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
13
|
+
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,500;0,9..40,700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
|
14
|
+
<style>
|
|
15
|
+
:root {
|
|
16
|
+
--bg: #FAFAF8;
|
|
17
|
+
--fg: #1a1a18;
|
|
18
|
+
--fg-muted: #6b6b66;
|
|
19
|
+
--fg-hint: #9c9c96;
|
|
20
|
+
--coral: #E8564A;
|
|
21
|
+
--coral-hover: #d04a3f;
|
|
22
|
+
--indigo: #6366F1;
|
|
23
|
+
--indigo-muted: rgba(99,102,241,0.08);
|
|
24
|
+
--green: #16a34a;
|
|
25
|
+
--green-bg: rgba(22,163,74,0.06);
|
|
26
|
+
--border: rgba(0,0,0,0.08);
|
|
27
|
+
--code-bg: #1e1e1c;
|
|
28
|
+
--code-fg: #e8e8e4;
|
|
29
|
+
--card-bg: #ffffff;
|
|
30
|
+
--surface: #f4f4f0;
|
|
31
|
+
}
|
|
32
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
33
|
+
body {
|
|
34
|
+
font-family: 'DM Sans', system-ui, sans-serif;
|
|
35
|
+
background: var(--bg);
|
|
36
|
+
color: var(--fg);
|
|
37
|
+
line-height: 1.6;
|
|
38
|
+
-webkit-font-smoothing: antialiased;
|
|
39
|
+
}
|
|
40
|
+
.container { max-width: 860px; margin: 0 auto; padding: 0 24px; }
|
|
41
|
+
nav {
|
|
42
|
+
padding: 20px 0;
|
|
43
|
+
border-bottom: 1px solid var(--border);
|
|
44
|
+
position: sticky; top: 0;
|
|
45
|
+
background: rgba(250,250,248,0.92);
|
|
46
|
+
backdrop-filter: blur(12px);
|
|
47
|
+
z-index: 10;
|
|
48
|
+
}
|
|
49
|
+
nav .container { display: flex; align-items: center; justify-content: space-between; }
|
|
50
|
+
.nav-brand { font-weight: 700; color: var(--fg); text-decoration: none; font-size: 18px; }
|
|
51
|
+
.nav-brand span { color: var(--coral); }
|
|
52
|
+
.lang-switch { font-size: 14px; color: var(--fg-muted); }
|
|
53
|
+
.lang-switch a { color: var(--indigo); text-decoration: none; margin-left: 12px; }
|
|
54
|
+
.lang-switch a:hover { text-decoration: underline; }
|
|
55
|
+
.lang-switch .active { color: var(--fg); font-weight: 600; pointer-events: none; }
|
|
56
|
+
|
|
57
|
+
header.hero { padding: 72px 0 32px; }
|
|
58
|
+
header.hero h1 { font-size: 42px; line-height: 1.15; letter-spacing: -0.02em; margin-bottom: 16px; }
|
|
59
|
+
header.hero h1 .coral { color: var(--coral); }
|
|
60
|
+
header.hero p.tagline { font-size: 19px; color: var(--fg-muted); margin-bottom: 8px; max-width: 640px; }
|
|
61
|
+
header.hero p.url-line { font-size: 14px; color: var(--fg-hint); margin-top: 18px; }
|
|
62
|
+
header.hero p.url-line code { font-family: 'JetBrains Mono', monospace; background: var(--surface); padding: 3px 8px; border-radius: 4px; font-size: 13px; color: var(--fg); }
|
|
63
|
+
|
|
64
|
+
main { padding: 24px 0 80px; }
|
|
65
|
+
h2 { font-size: 24px; margin: 48px 0 16px; letter-spacing: -0.01em; }
|
|
66
|
+
h3 { font-size: 17px; margin: 18px 0 6px; }
|
|
67
|
+
p { margin: 0 0 14px; }
|
|
68
|
+
ul { margin: 0 0 16px 22px; }
|
|
69
|
+
li { margin-bottom: 4px; }
|
|
70
|
+
a { color: var(--indigo); }
|
|
71
|
+
|
|
72
|
+
.client-grid {
|
|
73
|
+
display: grid;
|
|
74
|
+
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
|
75
|
+
gap: 16px;
|
|
76
|
+
margin: 20px 0 36px;
|
|
77
|
+
}
|
|
78
|
+
.client-card {
|
|
79
|
+
background: var(--card-bg);
|
|
80
|
+
border: 1px solid var(--border);
|
|
81
|
+
border-radius: 12px;
|
|
82
|
+
padding: 20px 22px;
|
|
83
|
+
display: flex;
|
|
84
|
+
flex-direction: column;
|
|
85
|
+
gap: 10px;
|
|
86
|
+
}
|
|
87
|
+
.client-card h3 { margin: 0; font-size: 16px; font-weight: 700; }
|
|
88
|
+
.client-card .subtitle { color: var(--fg-muted); font-size: 13px; margin-top: -4px; }
|
|
89
|
+
.client-card .steps { font-size: 14px; color: var(--fg); margin: 4px 0 0 0; padding-left: 18px; }
|
|
90
|
+
.client-card .steps li { margin-bottom: 3px; }
|
|
91
|
+
.client-card pre {
|
|
92
|
+
background: var(--code-bg);
|
|
93
|
+
color: var(--code-fg);
|
|
94
|
+
padding: 10px 12px;
|
|
95
|
+
border-radius: 6px;
|
|
96
|
+
font-size: 12px;
|
|
97
|
+
overflow-x: auto;
|
|
98
|
+
font-family: 'JetBrains Mono', monospace;
|
|
99
|
+
margin-top: 4px;
|
|
100
|
+
}
|
|
101
|
+
.client-card .badge {
|
|
102
|
+
display: inline-block;
|
|
103
|
+
background: var(--green-bg);
|
|
104
|
+
color: var(--green);
|
|
105
|
+
font-size: 11px;
|
|
106
|
+
font-weight: 600;
|
|
107
|
+
padding: 2px 8px;
|
|
108
|
+
border-radius: 10px;
|
|
109
|
+
margin-left: 6px;
|
|
110
|
+
vertical-align: middle;
|
|
111
|
+
}
|
|
112
|
+
.client-card .deeplink {
|
|
113
|
+
display: inline-block;
|
|
114
|
+
background: var(--coral);
|
|
115
|
+
color: white;
|
|
116
|
+
padding: 10px 16px;
|
|
117
|
+
border-radius: 8px;
|
|
118
|
+
font-weight: 600;
|
|
119
|
+
text-decoration: none;
|
|
120
|
+
font-size: 14px;
|
|
121
|
+
text-align: center;
|
|
122
|
+
margin-top: 4px;
|
|
123
|
+
}
|
|
124
|
+
.client-card .deeplink:hover { background: var(--coral-hover); }
|
|
125
|
+
|
|
126
|
+
.prompts {
|
|
127
|
+
background: var(--card-bg);
|
|
128
|
+
border: 1px solid var(--border);
|
|
129
|
+
border-radius: 12px;
|
|
130
|
+
padding: 26px 28px;
|
|
131
|
+
margin: 24px 0 36px;
|
|
132
|
+
}
|
|
133
|
+
.prompts h2 { margin-top: 0; }
|
|
134
|
+
.prompt {
|
|
135
|
+
border-left: 3px solid var(--coral);
|
|
136
|
+
padding: 6px 0 6px 16px;
|
|
137
|
+
margin: 14px 0;
|
|
138
|
+
font-size: 16px;
|
|
139
|
+
}
|
|
140
|
+
.prompt code {
|
|
141
|
+
font-family: 'JetBrains Mono', monospace;
|
|
142
|
+
color: var(--fg);
|
|
143
|
+
background: transparent;
|
|
144
|
+
font-size: 14px;
|
|
145
|
+
}
|
|
146
|
+
.prompt .what {
|
|
147
|
+
display: block;
|
|
148
|
+
color: var(--fg-muted);
|
|
149
|
+
font-size: 13px;
|
|
150
|
+
margin-top: 4px;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.callout {
|
|
154
|
+
background: var(--indigo-muted);
|
|
155
|
+
border-left: 3px solid var(--indigo);
|
|
156
|
+
padding: 14px 18px;
|
|
157
|
+
margin: 20px 0;
|
|
158
|
+
border-radius: 6px;
|
|
159
|
+
font-size: 15px;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
details {
|
|
163
|
+
background: var(--surface);
|
|
164
|
+
border-radius: 8px;
|
|
165
|
+
padding: 14px 18px;
|
|
166
|
+
margin: 12px 0;
|
|
167
|
+
}
|
|
168
|
+
details summary { font-weight: 600; cursor: pointer; }
|
|
169
|
+
details > *:not(summary) { margin-top: 12px; }
|
|
170
|
+
details pre {
|
|
171
|
+
background: var(--code-bg);
|
|
172
|
+
color: var(--code-fg);
|
|
173
|
+
padding: 12px 14px;
|
|
174
|
+
border-radius: 6px;
|
|
175
|
+
font-size: 12px;
|
|
176
|
+
overflow-x: auto;
|
|
177
|
+
font-family: 'JetBrains Mono', monospace;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
footer { padding: 40px 0; border-top: 1px solid var(--border); color: var(--fg-muted); font-size: 14px; }
|
|
181
|
+
footer a { color: var(--indigo); text-decoration: none; }
|
|
182
|
+
</style>
|
|
183
|
+
</head>
|
|
184
|
+
<body>
|
|
185
|
+
<nav>
|
|
186
|
+
<div class="container">
|
|
187
|
+
<a href="/v1/portal" class="nav-brand">AIMEAT<span>.</span></a>
|
|
188
|
+
<div class="lang-switch">
|
|
189
|
+
<a href="/v1/connect">EN</a>
|
|
190
|
+
<a href="/v1/connect/fi" class="active">FI</a>
|
|
191
|
+
</div>
|
|
192
|
+
</div>
|
|
193
|
+
</nav>
|
|
194
|
+
|
|
195
|
+
<header class="hero">
|
|
196
|
+
<div class="container">
|
|
197
|
+
<h1>Liitä AIMEAT <span class="coral">tekoälyysi</span>.</h1>
|
|
198
|
+
<p class="tagline">Pysyvä muisti, kyvykkyydet ja jaettu työtila kaikille MCP-yhteensopiville tekoälyille — Claude, Cursor, VS Code Copilot, ChatGPT. Tuo oma tekoälysi; me säilytämme datan, jonka <em>sinä</em> omistat.</p>
|
|
199
|
+
<p class="url-line">MCP-päätepiste: <code>{{mcpUrl}}</code> · OAuth 2.1 + PKCE · MCP-spesifikaatio <code>2025-11-25</code></p>
|
|
200
|
+
</div>
|
|
201
|
+
</header>
|
|
202
|
+
|
|
203
|
+
<main>
|
|
204
|
+
<div class="container">
|
|
205
|
+
|
|
206
|
+
<h2>Liitä alle minuutissa</h2>
|
|
207
|
+
<p>Valitse tekoälyalustasi ja seuraa vaiheita. OAuth-kirjautuminen avautuu selaimeen — kirjaudu aimeat.io-tiliisi kerran, ja tekoäly saa pysyvän muistin ja jaetun työtilan.</p>
|
|
208
|
+
|
|
209
|
+
<div class="client-grid">
|
|
210
|
+
|
|
211
|
+
<div class="client-card">
|
|
212
|
+
<h3>Cursor <span class="badge">1-klikki</span></h3>
|
|
213
|
+
<p class="subtitle">URL-skeema-deeplink. Cursor avaa vahvistusikkunan.</p>
|
|
214
|
+
<a class="deeplink" href="cursor://anysphere.cursor-deeplink/mcp/install?name=aimeat&config={{cursorDeeplinkConfig}}">Lisää Cursoriin</a>
|
|
215
|
+
</div>
|
|
216
|
+
|
|
217
|
+
<div class="client-card">
|
|
218
|
+
<h3>Claude Code (CLI) <span class="badge">1 rivi</span></h3>
|
|
219
|
+
<p class="subtitle">Suorita terminaalissa, jossa Claude Code on asennettu.</p>
|
|
220
|
+
<pre>claude mcp add aimeat \
|
|
221
|
+
--transport http \
|
|
222
|
+
{{mcpUrl}}</pre>
|
|
223
|
+
</div>
|
|
224
|
+
|
|
225
|
+
<div class="client-card">
|
|
226
|
+
<h3>VS Code (Copilot) <span class="badge">1 rivi</span></h3>
|
|
227
|
+
<p class="subtitle">Lisää palvelimen käyttäjätason MCP-konfiguraatioon.</p>
|
|
228
|
+
<pre>code --add-mcp '{"name":"aimeat","url":"{{mcpUrl}}"}'</pre>
|
|
229
|
+
</div>
|
|
230
|
+
|
|
231
|
+
<div class="client-card">
|
|
232
|
+
<h3>Claude Desktop</h3>
|
|
233
|
+
<p class="subtitle">Asetukset → Liittimet → Lisää mukautettu liitin.</p>
|
|
234
|
+
<ol class="steps">
|
|
235
|
+
<li>Avaa <strong>Claude-valikko → Asetukset → Liittimet</strong></li>
|
|
236
|
+
<li>Klikkaa <strong>Lisää mukautettu liitin</strong></li>
|
|
237
|
+
<li>Liitä: <code>{{mcpUrl}}</code></li>
|
|
238
|
+
<li>Klikkaa <strong>Lisää</strong>, OAuth-kirjautuminen avautuu selaimeen</li>
|
|
239
|
+
</ol>
|
|
240
|
+
</div>
|
|
241
|
+
|
|
242
|
+
<div class="client-card">
|
|
243
|
+
<h3>claude.ai (selain)</h3>
|
|
244
|
+
<p class="subtitle">Pro / Max / Team / Enterprise. Ilmainen taso sallii yhden mukautetun liittimen.</p>
|
|
245
|
+
<ol class="steps">
|
|
246
|
+
<li>Avaa <strong>Asetukset → Liittimet</strong></li>
|
|
247
|
+
<li>Klikkaa <strong>Lisää mukautettu liitin</strong></li>
|
|
248
|
+
<li>Liitä: <code>{{mcpUrl}}</code></li>
|
|
249
|
+
<li>Kirjaudu aimeat.io-tiliisi kehotettaessa</li>
|
|
250
|
+
</ol>
|
|
251
|
+
</div>
|
|
252
|
+
|
|
253
|
+
<div class="client-card">
|
|
254
|
+
<h3>ChatGPT (mukautetut GPT:t / liittimet)</h3>
|
|
255
|
+
<p class="subtitle">Sama MCP-URL toimii kaikissa asiakkaissa, jotka tukevat mukautettuja liittimiä.</p>
|
|
256
|
+
<ol class="steps">
|
|
257
|
+
<li>Avaa asiakkaasi <strong>Liittimet</strong> tai <strong>Custom MCP</strong> -osio</li>
|
|
258
|
+
<li>Lisää URL <code>{{mcpUrl}}</code></li>
|
|
259
|
+
<li>OAuth 2.1 -kirjautuminen avautuu selaimeen</li>
|
|
260
|
+
</ol>
|
|
261
|
+
</div>
|
|
262
|
+
|
|
263
|
+
</div>
|
|
264
|
+
|
|
265
|
+
<div class="callout">
|
|
266
|
+
<strong>Ilmainen tili, ei luottokorttia.</strong> Rekisteröidy osoitteessa <a href="/v1/portal">{{nodeName}}</a>. Tekoälyagenttisi saa oman tunnisteen (GAII muotoa <code>claude#sinä@{{nodeId}}</code>) hyväksymilläsi käyttöoikeuksilla. Hallitset muistia, jakamista ja suostumuksia.
|
|
267
|
+
</div>
|
|
268
|
+
|
|
269
|
+
<div class="prompts">
|
|
270
|
+
<h2>Liittämisen jälkeen kokeile näitä</h2>
|
|
271
|
+
<p>Jokainen kehote käyttää oikeita AIMEAT-työkaluja MCP:n kautta. Avaa uusi keskustelu tekoälysi kanssa liittämisen jälkeen ja kysy:</p>
|
|
272
|
+
|
|
273
|
+
<div class="prompt">
|
|
274
|
+
<code>"Tallenna minulle muistiin: lempiharrastukseni on kalliokiipeily ja asun Helsingissä."</code>
|
|
275
|
+
<span class="what">→ käyttää <code>aimeat_memory_write</code>:a. Tekoälylläsi on nyt pysyvä tieto sinusta, joka säilyy keskusteluiden ja jopa eri tekoälyjen välillä.</span>
|
|
276
|
+
</div>
|
|
277
|
+
|
|
278
|
+
<div class="prompt">
|
|
279
|
+
<code>"Mitä tiedät minusta AIMEATista?"</code>
|
|
280
|
+
<span class="what">→ käyttää <code>aimeat_memory_list</code> + <code>aimeat_memory_read</code>. Pitäisi muistaa yllä oleva merkintä. Kokeile uudessa keskustelussa — siinähän idea juuri on.</span>
|
|
281
|
+
</div>
|
|
282
|
+
|
|
283
|
+
<div class="prompt">
|
|
284
|
+
<code>"Etsi AIMEAT-hakemistosta ihmisiä, jotka harrastavat kalliokiipeilyä Helsingin alueella."</code>
|
|
285
|
+
<span class="what">→ käyttää <code>aimeat_catalogue_directory</code>:a. Palauttaa julkiseen hakemistoon liittyneet henkilöt, joilla on sama kiinnostus + kaupunki.</span>
|
|
286
|
+
</div>
|
|
287
|
+
|
|
288
|
+
<div class="prompt">
|
|
289
|
+
<code>"Mihin organismeihin (ryhmiin) voin liittyä, ja mitä foorumeilla tapahtuu?"</code>
|
|
290
|
+
<span class="what">→ käyttää <code>aimeat_organism_list</code> + <code>aimeat_catalogue_boards</code>. Näyttää julkiset yhteisöt joihin voit liittyä ja keskustelufoorumit genesis-verkossa.</span>
|
|
291
|
+
</div>
|
|
292
|
+
</div>
|
|
293
|
+
|
|
294
|
+
<h2>Mitä saat</h2>
|
|
295
|
+
<ul>
|
|
296
|
+
<li><strong>94 MCP-työkalua</strong> kattaen muistin, tallennuksen, jakoryhmät, organismit, foorumit, tietopaketit, agenttien välisen työjonon ja morsel-talouden.</li>
|
|
297
|
+
<li><strong>Pysyvä identiteetti</strong> — tekoälyagentillasi on oma GAII, kuin sähköpostiosoite. Liitä sama AIMEAT-tili Claude Desktopiin ja Cursoriin; molemmat näkevät saman muistin.</li>
|
|
298
|
+
<li><strong>Vahvat GDPR-työkalut</strong> protokollan ytimessä — vienti, auditraportti, poisto, kaikki profiilin <em>Tietolompakko</em>-välilehdeltä.</li>
|
|
299
|
+
<li><strong>Federointivalmius</strong> — aimeat.io on genesis-solmu; voit ajaa omasi ja federoida tai aloittaa erillisen verkon organisaatiollesi.</li>
|
|
300
|
+
</ul>
|
|
301
|
+
|
|
302
|
+
<h2>Tekniset yksityiskohdat</h2>
|
|
303
|
+
|
|
304
|
+
<details>
|
|
305
|
+
<summary>MCP-protokolla & siirto</summary>
|
|
306
|
+
<ul>
|
|
307
|
+
<li><strong>Siirto:</strong> Streamable HTTP (MCP-spesifikaatio <code>2025-11-25</code>)</li>
|
|
308
|
+
<li><strong>Autentikointi:</strong> OAuth 2.1 + PKCE (S256), dynaaminen asiakasrekisteröinti (RFC 7591)</li>
|
|
309
|
+
<li><strong>Discovery:</strong> <a href="/.well-known/oauth-authorization-server">/.well-known/oauth-authorization-server</a> (RFC 8414) · <a href="/.well-known/oauth-protected-resource">/.well-known/oauth-protected-resource</a> (RFC 9728)</li>
|
|
310
|
+
<li><strong>CORS:</strong> <code>Access-Control-Allow-Origin: *</code> arkkitehtuurin mukaisesti — AIMEAT käyttää vain Bearer-tokeneita ilman evästeitä, joten implisiittisiä tunnistautumistapoja, joita Originin tarkistus suojaisi, ei ole. Verkkoon julkaistut sovellukset voivat liittyä mistä tahansa selaimesta.</li>
|
|
311
|
+
<li><strong>Käyttöoikeusalueet:</strong> <code>aimeat:full</code> tällä hetkellä; työkalukohtaiset alueet tulossa.</li>
|
|
312
|
+
<li><strong>Käyttörajoitus:</strong> 300 pyyntöä / ikkuna per istunto.</li>
|
|
313
|
+
</ul>
|
|
314
|
+
</details>
|
|
315
|
+
|
|
316
|
+
<details>
|
|
317
|
+
<summary>Viitemanifesti (työkalujen kehittäjille ja katselmoijille)</summary>
|
|
318
|
+
<p>94 työkalun luettelo ja työkalukohtaiset annotaatiot (vain-luku / tuhoava / idempotentti / open-world -vihjeet) on dokumentoitu avoimessa suunnitelmassa: <a href="https://github.com/miikkij/aimeat-protocol/blob/main/docs/plans/2026-05-29-connectors-directory-submission.md">docs/plans/2026-05-29-connectors-directory-submission.md</a>. Annotaatioiden lähdekoodi: <a href="https://github.com/miikkij/aimeat-protocol/blob/main/aimeat/src/mcp/annotations.ts"><code>aimeat/src/mcp/annotations.ts</code></a>.</p>
|
|
319
|
+
</details>
|
|
320
|
+
|
|
321
|
+
<details>
|
|
322
|
+
<summary>Pystytä oma solmu</summary>
|
|
323
|
+
<p>aimeat.io on genesis-solmu, ylläpidettynä henkilökohtaisena hankkeena edistämään AIMEATia, ajatusta että <em>sinä omistat datasi</em>, ja siihen liittyvää vapautta. Jos haluat mieluummin pystyttää oman solmun — yksityiselle organisaatiolle, tutkimusryhmälle, omaan genesis-verkkoosi eri tarkoitukseen — ohjelmisto on avointa lähdekoodia (MIT).</p>
|
|
324
|
+
<pre>git clone https://github.com/miikkij/aimeat-protocol
|
|
325
|
+
cd aimeat-protocol
|
|
326
|
+
pnpm install && pnpm aimeat init</pre>
|
|
327
|
+
<p>Opas: <a href="https://github.com/miikkij/aimeat-protocol#getting-started">github.com/miikkij/aimeat-protocol</a>.</p>
|
|
328
|
+
</details>
|
|
329
|
+
|
|
330
|
+
<details>
|
|
331
|
+
<summary>Miten dataani käsitellään?</summary>
|
|
332
|
+
<p>Lyhyesti: en myy dataa, en käytä sitä tekoälymallien kouluttamiseen, en jaa kolmansille osapuolille ilman suostumustasi. Tekoälyinferenssi tapahtuu chat-alustallasi (Claude Desktop, ChatGPT jne.) kyseisen alustan ehdoilla, ei minun — AIMEAT ei kutsu mitään LLM-API:a ellet tuo omaa avaintasi generaattori-toimintoon. Koko seloste: <a href="/v1/privacy/fi">tietosuojaseloste</a> (myös <a href="/v1/privacy">English</a>).</p>
|
|
333
|
+
</details>
|
|
334
|
+
|
|
335
|
+
</div>
|
|
336
|
+
</main>
|
|
337
|
+
|
|
338
|
+
<footer>
|
|
339
|
+
<div class="container">
|
|
340
|
+
<p>
|
|
341
|
+
<a href="/v1/portal">Etusivu</a> ·
|
|
342
|
+
<a href="https://github.com/miikkij/aimeat-protocol" target="_blank" rel="noopener">GitHub</a> ·
|
|
343
|
+
<a href="/v1/privacy/fi">Tietosuoja</a> ·
|
|
344
|
+
<a href="/v1/connect">In English</a>
|
|
345
|
+
</p>
|
|
346
|
+
</div>
|
|
347
|
+
</footer>
|
|
348
|
+
|
|
349
|
+
</body>
|
|
350
|
+
</html>
|