@firfi/huly-mcp 0.49.2 → 0.49.4
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 +16 -0
- package/dist/index.cjs +20 -18
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -164,6 +164,21 @@ Open the global configuration file (`~/.config/opencode/opencode.json`) and merg
|
|
|
164
164
|
|
|
165
165
|
</details>
|
|
166
166
|
|
|
167
|
+
<details>
|
|
168
|
+
<summary>Pi</summary>
|
|
169
|
+
|
|
170
|
+
Pi requires an MCP adapter. Install it, then use Huly MCP in `auto` mode with the four proxy tools
|
|
171
|
+
promoted into Pi's native tool list:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
pi install npm:pi-mcp-adapter
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
See the [Pi setup guide](docs/PI_SETUP.md) for the user-global configuration, optional
|
|
178
|
+
`TOOLSETS`/`TOOLS` native pins, and verification steps.
|
|
179
|
+
|
|
180
|
+
</details>
|
|
181
|
+
|
|
167
182
|
## Updating
|
|
168
183
|
|
|
169
184
|
The `@latest` tag asks the package runner for the newest version. Some MCP clients keep server processes or resolved installs alive, so restart or re-add the server when updating:
|
|
@@ -175,6 +190,7 @@ The `@latest` tag asks the package runner for the newest version. Some MCP clien
|
|
|
175
190
|
| **Claude Desktop** | Restart the app (it runs `npx` on startup) |
|
|
176
191
|
| **VS Code / Cursor** | Restart the MCP server from the command palette/configured client or reload the window |
|
|
177
192
|
| **OpenCode** | Restart OpenCode or start a new session after config changes |
|
|
193
|
+
| **Pi** | Run `/mcp reconnect huly`, then `/reload` if the registered direct-tool surface changed |
|
|
178
194
|
| **npx (manual)** | `npx -y @firfi/huly-mcp@latest` — the `-y` flag auto-confirms install prompts |
|
|
179
195
|
|
|
180
196
|
## HTTP Transport
|
package/dist/index.cjs
CHANGED
|
@@ -167601,7 +167601,7 @@ var HulyModelMetadataError = class extends Schema_exports.TaggedError()("HulyMod
|
|
|
167601
167601
|
};
|
|
167602
167602
|
|
|
167603
167603
|
// src/version.ts
|
|
167604
|
-
var VERSION = true ? "0.49.
|
|
167604
|
+
var VERSION = true ? "0.49.4" : "0.0.0-dev";
|
|
167605
167605
|
|
|
167606
167606
|
// src/huly/errors-approval-requests.ts
|
|
167607
167607
|
var ApprovalRequestNotFoundError = class extends Schema_exports.TaggedError()(
|
|
@@ -173859,6 +173859,16 @@ var connectAccountClient = async (config3, sdk) => {
|
|
|
173859
173859
|
};
|
|
173860
173860
|
var connectAccountClientWithRetry = (config3, sdk) => connectWithRetry(() => connectAccountClient(config3, sdk), config3.url);
|
|
173861
173861
|
|
|
173862
|
+
// src/mcp/tools/operation-failure.ts
|
|
173863
|
+
var ToolParseFailure = class extends Data_exports.TaggedError("ToolParseFailure") {
|
|
173864
|
+
};
|
|
173865
|
+
var ToolDomainFailure = class extends Data_exports.TaggedError("ToolDomainFailure") {
|
|
173866
|
+
};
|
|
173867
|
+
var ToolProvisionFailure = class extends Data_exports.TaggedError("ToolProvisionFailure") {
|
|
173868
|
+
};
|
|
173869
|
+
var ToolOutputFailure = class extends Data_exports.TaggedError("ToolOutputFailure") {
|
|
173870
|
+
};
|
|
173871
|
+
|
|
173862
173872
|
// src/mcp/tools/tool-annotations.ts
|
|
173863
173873
|
var deriveTitle = (name) => name.split("_").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
|
|
173864
173874
|
var READ_PREFIXES = ["list_", "get_", "describe_", "search_", "fulltext_", "download_", "preview_", "read_"];
|
|
@@ -173935,14 +173945,6 @@ var createToolDefinition = (spec) => ({
|
|
|
173935
173945
|
category: makeToolCategory(spec.category),
|
|
173936
173946
|
...spec.annotations === void 0 ? {} : { annotations: spec.annotations }
|
|
173937
173947
|
});
|
|
173938
|
-
var ToolParseFailure = class extends Data_exports.TaggedError("ToolParseFailure") {
|
|
173939
|
-
};
|
|
173940
|
-
var ToolDomainFailure = class extends Data_exports.TaggedError("ToolDomainFailure") {
|
|
173941
|
-
};
|
|
173942
|
-
var ToolProvisionFailure = class extends Data_exports.TaggedError("ToolProvisionFailure") {
|
|
173943
|
-
};
|
|
173944
|
-
var ToolOutputFailure = class extends Data_exports.TaggedError("ToolOutputFailure") {
|
|
173945
|
-
};
|
|
173946
173948
|
var createMissingArgumentsError = (toolName) => createInvalidParamsError(
|
|
173947
173949
|
`Invalid parameters for ${toolName}: missing arguments object. Pass an arguments object; use {} when you want defaults for optional parameters.`,
|
|
173948
173950
|
"MissingArguments"
|
|
@@ -194847,6 +194849,13 @@ var import_core94 = __toESM(require_lib5(), 1);
|
|
|
194847
194849
|
var MAX_ANCESTOR_DEPTH = 32;
|
|
194848
194850
|
var classRef4 = core.class.Class;
|
|
194849
194851
|
var includesQuery = (text4, query) => Option_exports.isNone(query) || text4.includes(query.value.toLowerCase());
|
|
194852
|
+
var classSearchRank = (summary5, query) => {
|
|
194853
|
+
if (Option_exports.isNone(query)) return 0;
|
|
194854
|
+
const search = query.value.toLowerCase();
|
|
194855
|
+
return [summary5.classId, summary5.label, summary5.shortLabel, summary5.pluralLabel].some(
|
|
194856
|
+
(value3) => value3?.toLowerCase() === search
|
|
194857
|
+
) ? 0 : 1;
|
|
194858
|
+
};
|
|
194850
194859
|
var batchResolveClassLabels2 = (client, classIds) => Effect_exports.gen(function* () {
|
|
194851
194860
|
if (classIds.length === 0) return /* @__PURE__ */ new Map();
|
|
194852
194861
|
const uniqueIds = [...new Set(classIds)];
|
|
@@ -194946,7 +194955,7 @@ var listHulyClasses = (params3) => Effect_exports.gen(function* () {
|
|
|
194946
194955
|
const limit = clampLimit(params3.limit ?? SDK_DISCOVERY_DEFAULT_LIMIT);
|
|
194947
194956
|
const query = Option_exports.fromNullable(params3.query);
|
|
194948
194957
|
const classes = yield* fetchClasses(client, params3);
|
|
194949
|
-
const matched = classes.map((cls) => toClassSummary(cls)).filter((summary5) => params3.kind === void 0 || summary5.kind === params3.kind).filter((summary5) => includesQuery(classSearchText(summary5), query)).slice(0, limit);
|
|
194958
|
+
const matched = classes.map((cls) => toClassSummary(cls)).filter((summary5) => params3.kind === void 0 || summary5.kind === params3.kind).filter((summary5) => includesQuery(classSearchText(summary5), query)).sort((left3, right3) => classSearchRank(left3, query) - classSearchRank(right3, query)).slice(0, limit);
|
|
194950
194959
|
const attributeCounts = countAttributesByClass(
|
|
194951
194960
|
yield* attributesForClasses(
|
|
194952
194961
|
client,
|
|
@@ -196088,7 +196097,6 @@ var SpaceCreationMetadataSchema = Schema_exports.Struct({
|
|
|
196088
196097
|
descriptor: NonEmptyString2,
|
|
196089
196098
|
baseClass: ObjectClassName,
|
|
196090
196099
|
targetClass: ObjectClassName,
|
|
196091
|
-
rolesCount: Count,
|
|
196092
196100
|
system: Schema_exports.optionalWith(Schema_exports.Boolean, { exact: true })
|
|
196093
196101
|
});
|
|
196094
196102
|
var TargetClassifierMetadataSchema = Schema_exports.Struct({
|
|
@@ -196123,11 +196131,6 @@ var targetShapeProblem = (metadata, attributes, roles) => {
|
|
|
196123
196131
|
`target mixin attribute '${wrongTypeAttribute.name}' is not a canonical Huly role-assignment field`
|
|
196124
196132
|
);
|
|
196125
196133
|
}
|
|
196126
|
-
if (roles.length !== metadata.rolesCount) {
|
|
196127
|
-
return NonEmptyString2.make(
|
|
196128
|
-
`space type declares ${metadata.rolesCount} roles but SDK metadata returned ${roles.length}`
|
|
196129
|
-
);
|
|
196130
|
-
}
|
|
196131
196134
|
const attributeNames = new Set(attributes.map((attribute) => attribute.name));
|
|
196132
196135
|
if (attributeNames.size !== attributes.length) {
|
|
196133
196136
|
return NonEmptyString2.make(`target mixin '${metadata.targetClass}' declares duplicate role attributes`);
|
|
@@ -196144,7 +196147,6 @@ var parseCreationMetadata = (spaceType, descriptor3) => {
|
|
|
196144
196147
|
descriptor: descriptor3._id,
|
|
196145
196148
|
baseClass: descriptor3.baseClass,
|
|
196146
196149
|
targetClass: spaceType.targetClass,
|
|
196147
|
-
rolesCount: spaceType.roles,
|
|
196148
196150
|
...descriptor3.system === void 0 ? {} : { system: descriptor3.system }
|
|
196149
196151
|
}).pipe(
|
|
196150
196152
|
Effect_exports.mapError(
|
|
@@ -196180,7 +196182,7 @@ var requireSafeTargetShape = (client, metadata) => Effect_exports.gen(function*
|
|
|
196180
196182
|
hulyQuery({ attributeOf: toClassRef(metadata.targetClass) })
|
|
196181
196183
|
),
|
|
196182
196184
|
client.findAll(core.class.Role, hulyQuery({ attachedTo: toRef(metadata.spaceType) }), {
|
|
196183
|
-
limit:
|
|
196185
|
+
limit: clampLimit(void 0)
|
|
196184
196186
|
})
|
|
196185
196187
|
]);
|
|
196186
196188
|
const attributeMetadata = yield* Schema_exports.decodeUnknown(TargetAttributeMetadataSchema)(
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@firfi/huly-mcp",
|
|
3
|
-
"version": "0.49.
|
|
3
|
+
"version": "0.49.4",
|
|
4
4
|
"description": "Huly MCP: feature-complete MCP server for Huly integration",
|
|
5
5
|
"mcpName": "io.github.dearlordylord/huly-mcp",
|
|
6
6
|
"type": "module",
|
|
@@ -152,6 +152,7 @@
|
|
|
152
152
|
"circular": "dpdm --no-warning --no-tree --no-progress --exit-code circular:1 --transform 'src/**/*.ts' 'packages/huly-cli/src/**/*.ts'",
|
|
153
153
|
"complexity": "oxlint -c oxlint.complexity.json src packages/huly-cli/src",
|
|
154
154
|
"integration:mcp:full": "bash scripts/integration_test_full.sh",
|
|
155
|
+
"certify:api-token": "node scripts/run-bundled.mjs scripts/api-token-certification.ts",
|
|
155
156
|
"integration:cli": "bash scripts/integration_test_cli.sh",
|
|
156
157
|
"integration:cli:full": "bash scripts/integration_test_cli_full.sh",
|
|
157
158
|
"local-release": "bash scripts/local_release.sh",
|
|
@@ -160,6 +161,9 @@
|
|
|
160
161
|
"report-cli-parity": "node scripts/run-bundled.mjs scripts/report-cli-parity.ts",
|
|
161
162
|
"update-cli-readme": "node scripts/run-bundled.mjs scripts/update-cli-readme.ts",
|
|
162
163
|
"verify-cli-readme": "node scripts/run-bundled.mjs scripts/update-cli-readme.ts --check",
|
|
164
|
+
"update-cli-skill": "node scripts/run-bundled.mjs scripts/update-cli-skill.ts",
|
|
165
|
+
"verify-cli-skill": "node scripts/run-bundled.mjs scripts/update-cli-skill.ts --check",
|
|
166
|
+
"verify-cli-skill-package": "node scripts/run-bundled.mjs scripts/verify-cli-skill-package.ts",
|
|
163
167
|
"verify-cli-package-closure": "node scripts/run-bundled.mjs scripts/verify-cli-package-closure.ts",
|
|
164
168
|
"verify-registry-metadata": "node scripts/sync-registry-metadata.mjs --check",
|
|
165
169
|
"verify-registry-schema": "node scripts/verify-registry-schema.mjs",
|