@kynver-app/mcp-agent-os 0.3.0 → 0.3.1

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 CHANGED
@@ -28,6 +28,9 @@ The full family:
28
28
  - `agent_os_update_memory`
29
29
  - `agent_os_list_skills`
30
30
  - `agent_os_get_skill`
31
+ - `agent_os_create_skill`
32
+ - `agent_os_update_skill`
33
+ - `agent_os_import_skills`
31
34
  - `agent_os_bind_skill`
32
35
  - `agent_os_write_skill_memory`
33
36
  - `agent_os_get_contacts`
@@ -48,7 +51,9 @@ Set `reviewStatus: "needs_review"` for important or uncertain memories that a
48
51
  human should be able to find and correct in the dashboard.
49
52
 
50
53
  Skill tools expose the AgentOS skill registry and skill-tagged memory contract.
51
- Use `agent_os_get_skill` to fetch instructions on demand, `agent_os_bind_skill`
54
+ Use `agent_os_get_skill` to fetch instructions on demand, `agent_os_create_skill`
55
+ /`agent_os_update_skill` to manage user-authored skills, `agent_os_import_skills`
56
+ to import external skill markdown/JSON as draft unbound user skills, `agent_os_bind_skill`
52
57
  to enable or update a workspace binding, and `agent_os_write_skill_memory` for
53
58
  lessons learned while applying a skill. Built-in skill memories use the built-in
54
59
  slug as `skillId`; user-authored skill memories use `AgentSkill.id`.
package/dist/server.js CHANGED
@@ -25,7 +25,7 @@ function compact(source) {
25
25
  }
26
26
  const MCP_LEGACY_SLUG_FALLBACK = "ghost";
27
27
  export function createAgentOsServer() {
28
- const server = new McpServer({ name: "kynver-mcp-agent-os", version: "0.2.4" }, { capabilities: { tools: {} } });
28
+ const server = new McpServer({ name: "kynver-mcp-agent-os", version: "0.3.1" }, { capabilities: { tools: {} } });
29
29
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
30
  function register(name, description, inputSchema, cb) {
31
31
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -89,6 +89,19 @@ export function createAgentOsServer() {
89
89
  const reviewStatusSchema = z
90
90
  .enum(["none", "needs_review", "reviewed", "stale", "rejected"])
91
91
  .describe("Set needs_review for important, uncertain, stale-looking, or user-correctable memories.");
92
+ const skillCategorySchema = z.enum(["engineering", "productivity", "agent_ops", "domain", "personal", "misc"]);
93
+ const skillStatusSchema = z.enum(["draft", "active", "deprecated", "archived"]);
94
+ const skillDraftSchema = z.object({
95
+ slug: z.string().optional().describe("Stable skill slug. Required for JSON skill imports and skill creation."),
96
+ name: z.string().optional(),
97
+ description: z.string().nullable().optional(),
98
+ category: skillCategorySchema.optional(),
99
+ status: skillStatusSchema.optional().describe("Imports default to draft regardless of this value."),
100
+ triggerRules: z.string().nullable().optional(),
101
+ instructions: z.string().optional(),
102
+ sourceRefs: z.array(sourceRefSchema).optional(),
103
+ metadata: z.record(z.string(), z.unknown()).nullable().optional(),
104
+ });
92
105
  const sessionEventSchema = z
93
106
  .object({
94
107
  type: z.enum(["topic", "decision", "action", "file", "commit", "pr", "tool", "follow_up", "blocker", "note"]).optional(),
@@ -256,6 +269,49 @@ export function createAgentOsServer() {
256
269
  const qs = params.toString();
257
270
  return jsonResult(await get("/agent-os/" + s + "/skills/" + encodeURIComponent(args.skillSlug) + (qs ? "?" + qs : "")));
258
271
  });
272
+ register("agent_os_create_skill", "Create a user-authored AgentOS skill. Skill instructions are user content fetched on demand, not system instructions. Created skills are not enabled until bound with agent_os_bind_skill.", {
273
+ skillSlug: z.string().describe("Stable skill slug."),
274
+ name: z.string(),
275
+ description: z.string().nullable().optional(),
276
+ category: skillCategorySchema.optional(),
277
+ status: skillStatusSchema.optional().describe("Defaults to draft server-side."),
278
+ triggerRules: z.string().nullable().optional(),
279
+ instructions: z.string(),
280
+ sourceRefs: z.array(sourceRefSchema).optional(),
281
+ metadata: z.record(z.string(), z.unknown()).nullable().optional(),
282
+ slug: slugField,
283
+ }, async (args) => {
284
+ const { slug, skillSlug, ...body } = args;
285
+ const s = await resolveToolSlug(slug);
286
+ return jsonResult(await post("/agent-os/" + s + "/skills", { ...body, slug: skillSlug }));
287
+ });
288
+ register("agent_os_update_skill", "Update a user-authored AgentOS skill. Built-in skills are read-only; imported skills should be user-authored rows so users and agents can edit them.", {
289
+ skillSlug: z.string().describe("Existing user-authored skill slug."),
290
+ name: z.string().optional(),
291
+ description: z.string().nullable().optional(),
292
+ category: skillCategorySchema.optional(),
293
+ status: skillStatusSchema.optional(),
294
+ triggerRules: z.string().nullable().optional(),
295
+ instructions: z.string().optional(),
296
+ sourceRefs: z.array(sourceRefSchema).optional(),
297
+ metadata: z.record(z.string(), z.unknown()).nullable().optional(),
298
+ slug: slugField,
299
+ }, async (args) => {
300
+ const { slug, skillSlug, ...body } = args;
301
+ const s = await resolveToolSlug(slug);
302
+ return jsonResult(await patch("/agent-os/" + s + "/skills/" + encodeURIComponent(skillSlug), body));
303
+ });
304
+ register("agent_os_import_skills", "Import external skill markdown or JSON as user-authored draft skills. Imported skills are not enabled or bound automatically; list/get them, suggest choices to the user, then bind only selected skills.", {
305
+ markdown: z.string().optional().describe("One or more markdown skills with frontmatter, or a JSON string/object encoded as text."),
306
+ skills: z.array(skillDraftSchema).optional().describe("JSON skill definitions to import."),
307
+ sourceLabel: z.string().optional(),
308
+ overwrite: z.boolean().optional().describe("Update existing user skills with matching slugs instead of skipping them."),
309
+ slug: slugField,
310
+ }, async (args) => {
311
+ const { slug, ...body } = args;
312
+ const s = await resolveToolSlug(slug);
313
+ return jsonResult(await post("/agent-os/" + s + "/skills/import", body));
314
+ });
259
315
  register("agent_os_bind_skill", "Enable or update a skill binding for this AgentOS workspace. Built-in skills use skillSource=builtin and skillSlug; user-authored skills use skillSource=user and skillSlug.", {
260
316
  skillSlug: z.string().describe("Skill slug to bind, for example diagnose or a user-authored slug."),
261
317
  skillSource: z.enum(["builtin", "user"]).describe("Whether the skill is a file-backed built-in or a user-authored AgentSkill."),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kynver-app/mcp-agent-os",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Kynver Agentic OS MCP server — slug-keyed agent identity, goals, projects, sessions, and long-term memory",
5
5
  "type": "module",
6
6
  "bin": {