@cpenned/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,77 @@
1
+ // Opinionated read tools: computed views and the review system. Views are
2
+ // timezone-aware (tz overrides the vault default); review tools cover the due
3
+ // queue, garden deep-review, forcing a garden into review, and marking items
4
+ // reviewed (which restarts their clock).
5
+ import { z } from "zod";
6
+ import { runTool } from "../result.js";
7
+ const getViewSchema = z.object({
8
+ view: z.enum(["today", "upcoming", "anytime", "someday", "overdue"]),
9
+ tz: z
10
+ .string()
11
+ .optional()
12
+ .describe("IANA timezone (e.g. America/New_York); defaults to the vault timezone"),
13
+ limit: z.number().int().positive().optional(),
14
+ cursor: z.string().optional(),
15
+ });
16
+ export function getView(client, args) {
17
+ return client.get(`/v1/views/${args.view}`, {
18
+ tz: args.tz,
19
+ limit: args.limit,
20
+ cursor: args.cursor,
21
+ });
22
+ }
23
+ const getReviewsSchema = z.object({
24
+ gardenId: z.string().optional().describe("Restrict the due queue to one garden"),
25
+ limit: z.number().int().positive().optional(),
26
+ });
27
+ export function getReviews(client, args) {
28
+ return client.get("/v1/reviews", { gardenId: args.gardenId, limit: args.limit });
29
+ }
30
+ const gardenIdSchema = z.object({ gardenId: z.string() });
31
+ export function reviewGarden(client, args) {
32
+ return client.get(`/v1/gardens/${args.gardenId}/review`);
33
+ }
34
+ export function requestGardenReview(client, args) {
35
+ return client.post(`/v1/gardens/${args.gardenId}/request-review`);
36
+ }
37
+ const markTaskReviewedSchema = z.object({ taskId: z.string() });
38
+ export function markTaskReviewed(client, args) {
39
+ return client.post(`/v1/tasks/${args.taskId}/reviewed`);
40
+ }
41
+ const markProjectReviewedSchema = z.object({ projectId: z.string() });
42
+ export function markProjectReviewed(client, args) {
43
+ return client.post(`/v1/projects/${args.projectId}/reviewed`);
44
+ }
45
+ export function registerViewTools(server, client) {
46
+ server.registerTool("get_view", {
47
+ title: "Get view",
48
+ description: "A computed, timezone-aware view: today / upcoming / anytime / someday / overdue.",
49
+ inputSchema: getViewSchema.shape,
50
+ }, (args) => runTool(() => getView(client, args)));
51
+ server.registerTool("get_reviews", {
52
+ title: "Get review queue",
53
+ description: "Items due for review now (optionally scoped to a garden).",
54
+ inputSchema: getReviewsSchema.shape,
55
+ }, (args) => runTool(() => getReviews(client, args)));
56
+ server.registerTool("review_garden", {
57
+ title: "Review garden",
58
+ description: "Deep-review: every active item under a garden, regardless of review readiness.",
59
+ inputSchema: gardenIdSchema.shape,
60
+ }, (args) => runTool(() => reviewGarden(client, args)));
61
+ server.registerTool("request_garden_review", {
62
+ title: "Request garden review",
63
+ description: "Force all of a garden's active items into the due-review queue.",
64
+ inputSchema: gardenIdSchema.shape,
65
+ }, (args) => runTool(() => requestGardenReview(client, args)));
66
+ server.registerTool("mark_task_reviewed", {
67
+ title: "Mark task reviewed",
68
+ description: "Restart a task's review clock (lastReviewedAt=now, nextReviewAt=+interval).",
69
+ inputSchema: markTaskReviewedSchema.shape,
70
+ }, (args) => runTool(() => markTaskReviewed(client, args)));
71
+ server.registerTool("mark_project_reviewed", {
72
+ title: "Mark project reviewed",
73
+ description: "Restart a project's review clock.",
74
+ inputSchema: markProjectReviewedSchema.shape,
75
+ }, (args) => runTool(() => markProjectReviewed(client, args)));
76
+ }
77
+ //# sourceMappingURL=views.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views.js","sourceRoot":"","sources":["../../src/tools/views.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@cpenned/mcp",
3
+ "version": "0.1.0",
4
+ "description": "MCP server for Open Brain - a thin adapter over the /v1 HTTP API.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "author": "Chris Pennington",
8
+ "homepage": "https://github.com/cpenned/open-brain/tree/main/packages/mcp#readme",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/cpenned/open-brain.git",
12
+ "directory": "packages/mcp"
13
+ },
14
+ "bugs": {
15
+ "url": "https://github.com/cpenned/open-brain/issues"
16
+ },
17
+ "keywords": [
18
+ "mcp",
19
+ "model-context-protocol",
20
+ "open-brain",
21
+ "tasks",
22
+ "todo",
23
+ "productivity"
24
+ ],
25
+ "engines": {
26
+ "node": ">=18"
27
+ },
28
+ "bin": {
29
+ "open-brain-mcp": "./dist/index.js"
30
+ },
31
+ "main": "./dist/index.js",
32
+ "files": [
33
+ "dist",
34
+ "README.md",
35
+ "LICENSE"
36
+ ],
37
+ "publishConfig": {
38
+ "access": "public"
39
+ },
40
+ "scripts": {
41
+ "build": "tsc -p tsconfig.json",
42
+ "typecheck": "tsc -p tsconfig.json --noEmit",
43
+ "test": "vitest run",
44
+ "start": "node dist/index.js",
45
+ "prepublishOnly": "npm run build"
46
+ },
47
+ "dependencies": {
48
+ "@mcp-ui/server": "^6.1.0",
49
+ "@modelcontextprotocol/sdk": "^1.29.0",
50
+ "zod": "^3.23.8"
51
+ },
52
+ "devDependencies": {
53
+ "@types/node": "^22.0.0",
54
+ "typescript": "^5.6.0",
55
+ "vitest": "^4.1.8"
56
+ }
57
+ }