@allourthings/mcp-server 0.5.2 → 1.0.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/dist/index.js +84 -27
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -11142,13 +11142,57 @@ class StdioServerTransport {
|
|
|
11142
11142
|
|
|
11143
11143
|
// src/backends/native.ts
|
|
11144
11144
|
import { createRequire } from "module";
|
|
11145
|
+
|
|
11146
|
+
// src/config.ts
|
|
11147
|
+
import { createHash } from "crypto";
|
|
11148
|
+
import { homedir, platform } from "os";
|
|
11149
|
+
import { join } from "path";
|
|
11150
|
+
function expandTilde(p) {
|
|
11151
|
+
if (p === "~" || p.startsWith("~/")) {
|
|
11152
|
+
return join(homedir(), p.slice(2));
|
|
11153
|
+
}
|
|
11154
|
+
return p;
|
|
11155
|
+
}
|
|
11156
|
+
function platformCacheBase() {
|
|
11157
|
+
if (platform() === "win32") {
|
|
11158
|
+
return join(process.env.LOCALAPPDATA ?? join(homedir(), "AppData", "Local"), "allourthings");
|
|
11159
|
+
}
|
|
11160
|
+
if (platform() === "darwin") {
|
|
11161
|
+
return join(homedir(), "Library", "Caches", "allourthings");
|
|
11162
|
+
}
|
|
11163
|
+
const xdg = process.env.XDG_CACHE_HOME;
|
|
11164
|
+
return join(xdg ? expandTilde(xdg) : join(homedir(), ".cache"), "allourthings");
|
|
11165
|
+
}
|
|
11166
|
+
function resolveDataDir(argv = process.argv, env = process.env) {
|
|
11167
|
+
const argIndex = argv.indexOf("--data-dir");
|
|
11168
|
+
if (argIndex !== -1 && argv[argIndex + 1]) {
|
|
11169
|
+
return expandTilde(argv[argIndex + 1]);
|
|
11170
|
+
}
|
|
11171
|
+
if (env.ALLOURTHINGS_DATA_DIR) {
|
|
11172
|
+
return expandTilde(env.ALLOURTHINGS_DATA_DIR);
|
|
11173
|
+
}
|
|
11174
|
+
return join(homedir(), "Documents", "AllOurThings");
|
|
11175
|
+
}
|
|
11176
|
+
function resolveCacheDir(dataDir) {
|
|
11177
|
+
const hash = createHash("sha256").update(dataDir).digest("hex").slice(0, 16);
|
|
11178
|
+
return join(platformCacheBase(), hash);
|
|
11179
|
+
}
|
|
11180
|
+
|
|
11181
|
+
// src/backends/native.ts
|
|
11145
11182
|
var require2 = createRequire(import.meta.url);
|
|
11146
11183
|
var { JsCatalogStore } = require2("@allourthings/core");
|
|
11147
11184
|
|
|
11148
11185
|
class NativeBackend {
|
|
11149
11186
|
store;
|
|
11150
11187
|
constructor(dataDir) {
|
|
11151
|
-
this.store = new JsCatalogStore(dataDir);
|
|
11188
|
+
this.store = new JsCatalogStore(dataDir, resolveCacheDir(dataDir));
|
|
11189
|
+
}
|
|
11190
|
+
refresh() {
|
|
11191
|
+
try {
|
|
11192
|
+
this.store.refresh();
|
|
11193
|
+
} catch (e) {
|
|
11194
|
+
console.error("[allourthings] cache refresh failed:", e);
|
|
11195
|
+
}
|
|
11152
11196
|
}
|
|
11153
11197
|
async addItem(newItem) {
|
|
11154
11198
|
return this.store.addItem(newItem);
|
|
@@ -11157,6 +11201,7 @@ class NativeBackend {
|
|
|
11157
11201
|
return this.store.getItem(idOrName);
|
|
11158
11202
|
}
|
|
11159
11203
|
async listItems(filter) {
|
|
11204
|
+
this.refresh();
|
|
11160
11205
|
return this.store.listItems(filter ?? null);
|
|
11161
11206
|
}
|
|
11162
11207
|
async updateItem(id, updates) {
|
|
@@ -11166,8 +11211,12 @@ class NativeBackend {
|
|
|
11166
11211
|
return this.store.deleteItem(id);
|
|
11167
11212
|
}
|
|
11168
11213
|
async searchItems(query) {
|
|
11214
|
+
this.refresh();
|
|
11169
11215
|
return this.store.searchItems(query);
|
|
11170
11216
|
}
|
|
11217
|
+
async getItemFields() {
|
|
11218
|
+
return this.store.getItemFields();
|
|
11219
|
+
}
|
|
11171
11220
|
async addAttachment(itemId, filename, kind, data, label) {
|
|
11172
11221
|
const result = this.store.addAttachment(itemId, filename, kind, data, label ?? null);
|
|
11173
11222
|
if (result instanceof Error)
|
|
@@ -17854,7 +17903,7 @@ async function getItem(backend, input) {
|
|
|
17854
17903
|
// src/tools/list-items.ts
|
|
17855
17904
|
var listItemsInputSchema = exports_external.object({
|
|
17856
17905
|
category: exports_external.string().optional().describe("Filter by category"),
|
|
17857
|
-
|
|
17906
|
+
subcategory: exports_external.string().optional().describe("Filter by subcategory"),
|
|
17858
17907
|
tags: exports_external.array(exports_external.string()).optional().describe("Filter by tags (all must match)")
|
|
17859
17908
|
});
|
|
17860
17909
|
async function listItems(backend, input) {
|
|
@@ -17865,7 +17914,7 @@ async function listItems(backend, input) {
|
|
|
17865
17914
|
};
|
|
17866
17915
|
}
|
|
17867
17916
|
const summary = items.map((item) => {
|
|
17868
|
-
const meta = [item.category, item.
|
|
17917
|
+
const meta = [item.category, item.subcategory].filter(Boolean).join(" › ");
|
|
17869
17918
|
return `- ${item.name}${meta ? ` [${meta}]` : ""} (${item.id})`;
|
|
17870
17919
|
}).join(`
|
|
17871
17920
|
`);
|
|
@@ -17877,7 +17926,7 @@ ${summary}` }]
|
|
|
17877
17926
|
|
|
17878
17927
|
// src/tools/update-item.ts
|
|
17879
17928
|
var updateItemInputSchema = exports_external.object({
|
|
17880
|
-
id: exports_external.string().
|
|
17929
|
+
id: exports_external.string().describe("Item ID to update (8-character hex, from the id field on the item)"),
|
|
17881
17930
|
updates: exports_external.record(exports_external.unknown()).describe("Fields to update. Any item field can be updated: name, category, brand, model, purchase_date, purchase_price, currency, warranty_expires, retailer, location, features, notes, tags, serial_number. Custom fields are also accepted.")
|
|
17882
17931
|
});
|
|
17883
17932
|
async function updateItem(backend, input) {
|
|
@@ -17894,7 +17943,7 @@ async function updateItem(backend, input) {
|
|
|
17894
17943
|
|
|
17895
17944
|
// src/tools/delete-item.ts
|
|
17896
17945
|
var deleteItemInputSchema = exports_external.object({
|
|
17897
|
-
id: exports_external.string().
|
|
17946
|
+
id: exports_external.string().describe("Item ID to delete")
|
|
17898
17947
|
});
|
|
17899
17948
|
async function deleteItem(backend, input) {
|
|
17900
17949
|
const deleted = await backend.deleteItem(input.id);
|
|
@@ -18042,6 +18091,27 @@ async function attachFromUrl(backend, input) {
|
|
|
18042
18091
|
};
|
|
18043
18092
|
}
|
|
18044
18093
|
|
|
18094
|
+
// src/tools/get-item-fields.ts
|
|
18095
|
+
var getItemFieldsInputSchema = exports_external.object({});
|
|
18096
|
+
async function getItemFields(backend) {
|
|
18097
|
+
const fields = await backend.getItemFields();
|
|
18098
|
+
if (fields.length === 0) {
|
|
18099
|
+
return {
|
|
18100
|
+
content: [{ type: "text", text: "No items in catalog yet." }]
|
|
18101
|
+
};
|
|
18102
|
+
}
|
|
18103
|
+
return {
|
|
18104
|
+
content: [
|
|
18105
|
+
{
|
|
18106
|
+
type: "text",
|
|
18107
|
+
text: `Fields in use across your catalog:
|
|
18108
|
+
${fields.map((f) => `- ${f}`).join(`
|
|
18109
|
+
`)}`
|
|
18110
|
+
}
|
|
18111
|
+
]
|
|
18112
|
+
};
|
|
18113
|
+
}
|
|
18114
|
+
|
|
18045
18115
|
// src/server.ts
|
|
18046
18116
|
function createServer(backend) {
|
|
18047
18117
|
const server = new Server({ name: "allourthings", version: "0.1.0" }, { capabilities: { tools: {} } });
|
|
@@ -18049,7 +18119,7 @@ function createServer(backend) {
|
|
|
18049
18119
|
tools: [
|
|
18050
18120
|
{
|
|
18051
18121
|
name: "add_item",
|
|
18052
|
-
description: "Add a new item to the
|
|
18122
|
+
description: "Add a new item to the inventory",
|
|
18053
18123
|
inputSchema: zodToJsonSchema(addItemInputSchema)
|
|
18054
18124
|
},
|
|
18055
18125
|
{
|
|
@@ -18059,7 +18129,7 @@ function createServer(backend) {
|
|
|
18059
18129
|
},
|
|
18060
18130
|
{
|
|
18061
18131
|
name: "list_items",
|
|
18062
|
-
description: "List all items, optionally filtered by category or tags",
|
|
18132
|
+
description: "List all items, optionally filtered by category, subcategory, or tags",
|
|
18063
18133
|
inputSchema: zodToJsonSchema(listItemsInputSchema)
|
|
18064
18134
|
},
|
|
18065
18135
|
{
|
|
@@ -18096,6 +18166,11 @@ function createServer(backend) {
|
|
|
18096
18166
|
name: "attach_from_url",
|
|
18097
18167
|
description: "Download a file from a URL and attach it to an item (e.g. a PDF manual or warranty document)",
|
|
18098
18168
|
inputSchema: zodToJsonSchema(attachFromUrlInputSchema)
|
|
18169
|
+
},
|
|
18170
|
+
{
|
|
18171
|
+
name: "get_item_fields",
|
|
18172
|
+
description: "Return all field names currently in use across your catalog. Call this before adding or updating items to discover what fields exist and use consistent naming.",
|
|
18173
|
+
inputSchema: zodToJsonSchema(getItemFieldsInputSchema)
|
|
18099
18174
|
}
|
|
18100
18175
|
]
|
|
18101
18176
|
}));
|
|
@@ -18122,6 +18197,8 @@ function createServer(backend) {
|
|
|
18122
18197
|
return deleteAttachment(backend, deleteAttachmentInputSchema.parse(args));
|
|
18123
18198
|
case "attach_from_url":
|
|
18124
18199
|
return attachFromUrl(backend, attachFromUrlInputSchema.parse(args));
|
|
18200
|
+
case "get_item_fields":
|
|
18201
|
+
return getItemFields(backend);
|
|
18125
18202
|
default:
|
|
18126
18203
|
throw new Error(`Unknown tool: ${name}`);
|
|
18127
18204
|
}
|
|
@@ -18129,26 +18206,6 @@ function createServer(backend) {
|
|
|
18129
18206
|
return server;
|
|
18130
18207
|
}
|
|
18131
18208
|
|
|
18132
|
-
// src/config.ts
|
|
18133
|
-
import { homedir } from "os";
|
|
18134
|
-
import { join } from "path";
|
|
18135
|
-
function expandTilde(p) {
|
|
18136
|
-
if (p === "~" || p.startsWith("~/")) {
|
|
18137
|
-
return join(homedir(), p.slice(2));
|
|
18138
|
-
}
|
|
18139
|
-
return p;
|
|
18140
|
-
}
|
|
18141
|
-
function resolveDataDir(argv = process.argv, env = process.env) {
|
|
18142
|
-
const argIndex = argv.indexOf("--data-dir");
|
|
18143
|
-
if (argIndex !== -1 && argv[argIndex + 1]) {
|
|
18144
|
-
return expandTilde(argv[argIndex + 1]);
|
|
18145
|
-
}
|
|
18146
|
-
if (env.ALLOURTHINGS_DATA_DIR) {
|
|
18147
|
-
return expandTilde(env.ALLOURTHINGS_DATA_DIR);
|
|
18148
|
-
}
|
|
18149
|
-
return join(homedir(), "Documents", "AllOurThings");
|
|
18150
|
-
}
|
|
18151
|
-
|
|
18152
18209
|
// src/index.ts
|
|
18153
18210
|
var dataDir = resolveDataDir();
|
|
18154
18211
|
console.error(`[allourthings] data directory: ${dataDir}`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@allourthings/mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"mcpName": "io.allourthings/mcp-server",
|
|
5
5
|
"description": "AllOurThings — Your things, understood by AI.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"typecheck": "tsc --noEmit"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
+
"@allourthings/core": "^1.0.0",
|
|
26
27
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
27
|
-
"@allourthings/core": "^0.1.10",
|
|
28
28
|
"zod": "^3.24.0",
|
|
29
29
|
"zod-to-json-schema": "^3.25.1"
|
|
30
30
|
},
|