fushiguro-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.
- package/LICENSE +21 -0
- package/README.md +278 -0
- package/catalog/agents/backend-api.md +71 -0
- package/catalog/agents/content-editor.md +59 -0
- package/catalog/agents/customer-support.md +60 -0
- package/catalog/agents/data-analyst.md +66 -0
- package/catalog/agents/database.md +65 -0
- package/catalog/agents/docs.md +52 -0
- package/catalog/agents/process-automation.md +61 -0
- package/catalog/agents/research-analyst.md +57 -0
- package/catalog/agents/security.md +68 -0
- package/catalog/agents/testing.md +63 -0
- package/catalog/agents/ux-ui-specialist.md +87 -0
- package/catalog/connectors/crm.md +24 -0
- package/catalog/connectors/data-warehouse.md +26 -0
- package/catalog/connectors/document-store.md +23 -0
- package/catalog/connectors/helpdesk.md +24 -0
- package/catalog/knowledge/platform/using-this-catalog.md +50 -0
- package/catalog/runbooks/_TEMPLATE.md +52 -0
- package/catalog/runbooks/ai-use-case-intake.md +89 -0
- package/catalog/runbooks/change-release.md +54 -0
- package/catalog/runbooks/customer-escalation.md +67 -0
- package/catalog/skills/cite-sources.md +18 -0
- package/catalog/skills/clarify-scope.md +18 -0
- package/catalog/skills/data-quality-check.md +22 -0
- package/catalog/skills/risk-and-compliance-check.md +21 -0
- package/catalog/skills/stakeholder-summary.md +21 -0
- package/catalog/tools/knowledge-search.md +14 -0
- package/catalog/tools/shell.md +15 -0
- package/catalog/tools/web-fetch.md +15 -0
- package/catalog/tools/web-search.md +15 -0
- package/catalog/topics/ai-adoption.md +25 -0
- package/catalog/topics/customer-operations.md +21 -0
- package/catalog/topics/data-and-reporting.md +20 -0
- package/catalog/topics/marketing-content.md +19 -0
- package/catalog/topics/product-engineering.md +20 -0
- package/dist/catalog.d.ts +34 -0
- package/dist/catalog.js +412 -0
- package/dist/catalog.js.map +1 -0
- package/dist/config.d.ts +17 -0
- package/dist/config.js +48 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +5 -0
- package/dist/init.js +159 -0
- package/dist/init.js.map +1 -0
- package/dist/knowledge.d.ts +31 -0
- package/dist/knowledge.js +126 -0
- package/dist/knowledge.js.map +1 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.js +22 -0
- package/dist/main.js.map +1 -0
- package/dist/memory.d.ts +85 -0
- package/dist/memory.js +374 -0
- package/dist/memory.js.map +1 -0
- package/dist/quiet.d.ts +1 -0
- package/dist/quiet.js +21 -0
- package/dist/quiet.js.map +1 -0
- package/dist/registry.d.ts +15 -0
- package/dist/registry.js +128 -0
- package/dist/registry.js.map +1 -0
- package/dist/router.d.ts +55 -0
- package/dist/router.js +358 -0
- package/dist/router.js.map +1 -0
- package/dist/server.d.ts +6 -0
- package/dist/server.js +529 -0
- package/dist/server.js.map +1 -0
- package/dist/text.d.ts +20 -0
- package/dist/text.js +72 -0
- package/dist/text.js.map +1 -0
- package/dist/types.d.ts +195 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +57 -0
package/dist/text.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../src/text.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/** Shapes shared across the catalog, router, knowledge index, and memory store. */
|
|
2
|
+
/** The kinds of entity the catalog holds. Every one is a markdown file with frontmatter. */
|
|
3
|
+
export type EntityKind = "agent" | "skill" | "knowledge" | "runbook" | "topic" | "tool" | "connector";
|
|
4
|
+
/**
|
|
5
|
+
* Where an entity came from. `base` ships with the package, `custom` is the
|
|
6
|
+
* business's own, and `base+custom` is a base entity a custom file extended —
|
|
7
|
+
* custom scalars win, list fields union, and the custom body is appended.
|
|
8
|
+
*/
|
|
9
|
+
export type Layer = "base" | "custom" | "base+custom";
|
|
10
|
+
/** Fields every catalog entity carries, whatever its kind. */
|
|
11
|
+
export interface EntityBase {
|
|
12
|
+
kind: EntityKind;
|
|
13
|
+
layer: Layer;
|
|
14
|
+
/** Stable kebab-case slug. Unique within a kind; custom overrides base. */
|
|
15
|
+
name: string;
|
|
16
|
+
title: string;
|
|
17
|
+
description: string;
|
|
18
|
+
/** IDF-weighted routing signal. */
|
|
19
|
+
keywords: string[];
|
|
20
|
+
/** Example phrasings, matched by token overlap. */
|
|
21
|
+
triggers: string[];
|
|
22
|
+
/** Hand-written regexes — the strongest routing signal. */
|
|
23
|
+
patterns: RegExp[];
|
|
24
|
+
/** Business domains this belongs to, by topic slug. */
|
|
25
|
+
topics: string[];
|
|
26
|
+
tags: string[];
|
|
27
|
+
/** Everything below the frontmatter. */
|
|
28
|
+
body: string;
|
|
29
|
+
file: string;
|
|
30
|
+
/** Raw frontmatter, for kind-specific fields the loader did not claim. */
|
|
31
|
+
meta: Record<string, unknown>;
|
|
32
|
+
}
|
|
33
|
+
/** A specialist agent: a system prompt plus what it is allowed and expected to use. */
|
|
34
|
+
export interface Agent extends EntityBase {
|
|
35
|
+
kind: "agent";
|
|
36
|
+
/** Model hint for the host, e.g. "opus" | "sonnet" | "haiku". */
|
|
37
|
+
model?: string;
|
|
38
|
+
/** Host tool names the subagent should be given. */
|
|
39
|
+
tools: string[];
|
|
40
|
+
/** Skill slugs always attached to this agent, regardless of the task. */
|
|
41
|
+
skills: string[];
|
|
42
|
+
/** Connector slugs this agent is expected to reach. */
|
|
43
|
+
connectors: string[];
|
|
44
|
+
/** Runbook slugs this agent should follow when they apply. */
|
|
45
|
+
runbooks: string[];
|
|
46
|
+
/** Knowledge collection prefixes this agent may draw on. Empty = all. */
|
|
47
|
+
knowledge: string[];
|
|
48
|
+
}
|
|
49
|
+
/** A reusable procedure injected into an agent's prompt when it is relevant. */
|
|
50
|
+
export interface Skill extends EntityBase {
|
|
51
|
+
kind: "skill";
|
|
52
|
+
/** Agent slugs this skill may attach to. Empty means any agent. */
|
|
53
|
+
appliesTo: string[];
|
|
54
|
+
/** Always attach when the agent matches, without needing a keyword hit. */
|
|
55
|
+
always: boolean;
|
|
56
|
+
}
|
|
57
|
+
/** One source document in the RAG corpus, split into retrievable chunks. */
|
|
58
|
+
export interface KnowledgeDoc extends EntityBase {
|
|
59
|
+
kind: "knowledge";
|
|
60
|
+
/** Folder path under knowledge/, used to scope retrieval per agent. */
|
|
61
|
+
collection: string;
|
|
62
|
+
/** Where the content came from, for citation. */
|
|
63
|
+
sourceUrl?: string;
|
|
64
|
+
/** ISO date the content was last verified by a human. */
|
|
65
|
+
reviewed?: string;
|
|
66
|
+
chunks: KnowledgeChunk[];
|
|
67
|
+
/** Content hash, so re-indexing only happens when the file really changed. */
|
|
68
|
+
hash: string;
|
|
69
|
+
}
|
|
70
|
+
export interface KnowledgeChunk {
|
|
71
|
+
/** `${docName}#${index}` — stable enough to cite. */
|
|
72
|
+
id: string;
|
|
73
|
+
docName: string;
|
|
74
|
+
collection: string;
|
|
75
|
+
/** Heading trail, e.g. "Refund policy > Exceptions". */
|
|
76
|
+
heading: string;
|
|
77
|
+
text: string;
|
|
78
|
+
index: number;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* A team or project process guide: an ordered set of steps plus the context
|
|
82
|
+
* needed to run them. The packaged runbooks are templates — each business
|
|
83
|
+
* completes its own owners, thresholds, and escalation paths after setup.
|
|
84
|
+
*/
|
|
85
|
+
export interface Runbook extends EntityBase {
|
|
86
|
+
kind: "runbook";
|
|
87
|
+
/** True while this is still an unfilled template rather than agreed process. */
|
|
88
|
+
template: boolean;
|
|
89
|
+
/** Count of remaining `[FILL: ...]` markers in the body. */
|
|
90
|
+
placeholders: number;
|
|
91
|
+
/** Table of contents, derived from the body's headings. */
|
|
92
|
+
toc: RunbookSection[];
|
|
93
|
+
steps: string[];
|
|
94
|
+
/** Agent slugs qualified to execute this. */
|
|
95
|
+
agents: string[];
|
|
96
|
+
/** Knowledge doc slugs this procedure depends on. */
|
|
97
|
+
knowledge: string[];
|
|
98
|
+
connectors: string[];
|
|
99
|
+
owner?: string;
|
|
100
|
+
/** How long the whole procedure is expected to take. */
|
|
101
|
+
sla?: string;
|
|
102
|
+
/** Conditions under which a human must approve before continuing. */
|
|
103
|
+
escalation?: string;
|
|
104
|
+
}
|
|
105
|
+
export interface RunbookSection {
|
|
106
|
+
level: number;
|
|
107
|
+
title: string;
|
|
108
|
+
/** Line offset in the body, so a caller can slice just this section. */
|
|
109
|
+
line: number;
|
|
110
|
+
}
|
|
111
|
+
/** A business domain that ties agents, skills, knowledge, and runbooks together. */
|
|
112
|
+
export interface Topic extends EntityBase {
|
|
113
|
+
kind: "topic";
|
|
114
|
+
agents: string[];
|
|
115
|
+
skills: string[];
|
|
116
|
+
runbooks: string[];
|
|
117
|
+
connectors: string[];
|
|
118
|
+
knowledge: string[];
|
|
119
|
+
}
|
|
120
|
+
/** A capability the host can execute, described so an agent knows when to reach for it. */
|
|
121
|
+
export interface ToolDef extends EntityBase {
|
|
122
|
+
kind: "tool";
|
|
123
|
+
/** The name the host actually exposes, e.g. "Bash" or "mcp__stripe__create_refund". */
|
|
124
|
+
hostTool: string;
|
|
125
|
+
/** One line on when this is the right tool. */
|
|
126
|
+
when: string;
|
|
127
|
+
/** True when a human should confirm before it runs. */
|
|
128
|
+
requiresApproval: boolean;
|
|
129
|
+
}
|
|
130
|
+
/** An external system, described declaratively. Never holds a secret value. */
|
|
131
|
+
export interface Connector extends EntityBase {
|
|
132
|
+
kind: "connector";
|
|
133
|
+
/** e.g. "mcp" | "rest" | "database" | "saas". */
|
|
134
|
+
connectorKind: string;
|
|
135
|
+
/** e.g. "oauth" | "api-key" | "none". */
|
|
136
|
+
auth: string;
|
|
137
|
+
/** Names of env vars that must be set. Names only — never values. */
|
|
138
|
+
env: string[];
|
|
139
|
+
/** What this connector can do, in plain language. */
|
|
140
|
+
capabilities: string[];
|
|
141
|
+
/** Operations that must never be performed automatically. */
|
|
142
|
+
guardrails: string[];
|
|
143
|
+
baseUrl?: string;
|
|
144
|
+
status: "available" | "planned" | "deprecated";
|
|
145
|
+
}
|
|
146
|
+
export type Entity = Agent | Skill | KnowledgeDoc | Runbook | Topic | ToolDef | Connector;
|
|
147
|
+
export type MemoryKind = "preference" | "constraint" | "correction" | "style" | "fact";
|
|
148
|
+
export interface Memory {
|
|
149
|
+
id: number;
|
|
150
|
+
scope: string;
|
|
151
|
+
/** Agent slug this applies to, or null for "all agents". */
|
|
152
|
+
agent: string | null;
|
|
153
|
+
kind: MemoryKind;
|
|
154
|
+
text: string;
|
|
155
|
+
/** The reason behind it, carried into the briefing. */
|
|
156
|
+
why: string | null;
|
|
157
|
+
confidence: number;
|
|
158
|
+
source: string | null;
|
|
159
|
+
createdAt: string;
|
|
160
|
+
updatedAt: string;
|
|
161
|
+
hits: number;
|
|
162
|
+
supersededBy: number | null;
|
|
163
|
+
}
|
|
164
|
+
export type Outcome = "accepted" | "revised" | "rejected" | "wrong_agent";
|
|
165
|
+
export interface RouteCandidate {
|
|
166
|
+
name: string;
|
|
167
|
+
title: string;
|
|
168
|
+
description: string;
|
|
169
|
+
/** Normalised 0..1 — a comparable strength, not a probability. */
|
|
170
|
+
score: number;
|
|
171
|
+
why: string[];
|
|
172
|
+
}
|
|
173
|
+
export interface RouteResult {
|
|
174
|
+
chosen: RouteCandidate | null;
|
|
175
|
+
confidence: number;
|
|
176
|
+
/** True when the top two are too close to call. */
|
|
177
|
+
ambiguous: boolean;
|
|
178
|
+
alternatives: RouteCandidate[];
|
|
179
|
+
}
|
|
180
|
+
/** Everything the host needs to spawn one specialist subagent for one task. */
|
|
181
|
+
export interface Briefing {
|
|
182
|
+
agent: Agent;
|
|
183
|
+
route: RouteResult;
|
|
184
|
+
topics: Topic[];
|
|
185
|
+
skills: Skill[];
|
|
186
|
+
runbooks: Runbook[];
|
|
187
|
+
knowledge: (KnowledgeChunk & {
|
|
188
|
+
score: number;
|
|
189
|
+
})[];
|
|
190
|
+
tools: ToolDef[];
|
|
191
|
+
connectors: Connector[];
|
|
192
|
+
memories: Memory[];
|
|
193
|
+
/** The assembled system prompt, ready to hand to a subagent verbatim. */
|
|
194
|
+
systemPrompt: string;
|
|
195
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,mFAAmF"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "fushiguro-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP server that routes tasks to predefined specialist agents and remembers your preferences.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"fushiguro-mcp": "dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "dist/index.js",
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"catalog",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE"
|
|
15
|
+
],
|
|
16
|
+
"engines": {
|
|
17
|
+
"node": ">=22.5.0"
|
|
18
|
+
},
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"dev": "tsc --watch",
|
|
22
|
+
"start": "node dist/index.js",
|
|
23
|
+
"test": "npm run build && node --disable-warning=ExperimentalWarning test/smoke.mjs",
|
|
24
|
+
"prepublishOnly": "npm run build && npm test"
|
|
25
|
+
},
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
28
|
+
"yaml": "^2.9.0",
|
|
29
|
+
"zod": "^4.5.4"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@types/node": "^24.0.0",
|
|
33
|
+
"typescript": "^5.7.0"
|
|
34
|
+
},
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"author": "Carlo Jacalan <carlojacalan1@gmail.com>",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "git+https://github.com/omgcarlo/fushiguro-mcp.git"
|
|
40
|
+
},
|
|
41
|
+
"homepage": "https://github.com/omgcarlo/fushiguro-mcp#readme",
|
|
42
|
+
"bugs": {
|
|
43
|
+
"url": "https://github.com/omgcarlo/fushiguro-mcp/issues"
|
|
44
|
+
},
|
|
45
|
+
"keywords": [
|
|
46
|
+
"mcp",
|
|
47
|
+
"model-context-protocol",
|
|
48
|
+
"agents",
|
|
49
|
+
"subagents",
|
|
50
|
+
"rag",
|
|
51
|
+
"knowledge-base",
|
|
52
|
+
"memory",
|
|
53
|
+
"claude",
|
|
54
|
+
"ai-adoption",
|
|
55
|
+
"runbooks"
|
|
56
|
+
]
|
|
57
|
+
}
|