@daghis/teamcity-mcp 1.0.6 → 1.2.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/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.2.0](https://github.com/Daghis/teamcity-mcp/compare/v1.1.0...v1.2.0) (2025-09-15)
4
+
5
+
6
+ ### Features
7
+
8
+ * **tools:** add VCS root property management tools + integration test ([#95](https://github.com/Daghis/teamcity-mcp/issues/95)) ([13bbe17](https://github.com/Daghis/teamcity-mcp/commit/13bbe178564a53564aad4fcdb99bb3f2e5db4cb8))
9
+
10
+ ## [1.1.0](https://github.com/Daghis/teamcity-mcp/compare/v1.0.6...v1.1.0) (2025-09-14)
11
+
12
+
13
+ ### Features
14
+
15
+ * **utils:** add TeamCity service message escaping ([#85](https://github.com/Daghis/teamcity-mcp/issues/85)) ([6ee3b72](https://github.com/Daghis/teamcity-mcp/commit/6ee3b72e4db065faa0e01c7046328e1d4e1375c8))
16
+
3
17
  ## [1.0.6](https://github.com/Daghis/teamcity-mcp/compare/v1.0.5...v1.0.6) (2025-09-14)
4
18
 
5
19
 
package/dist/index.js CHANGED
@@ -25681,6 +25681,143 @@ var DEV_TOOLS = [
25681
25681
  );
25682
25682
  }
25683
25683
  },
25684
+ {
25685
+ name: "set_vcs_root_property",
25686
+ description: "Set a single VCS root property (e.g., branch, branchSpec, url)",
25687
+ inputSchema: {
25688
+ type: "object",
25689
+ properties: {
25690
+ id: { type: "string", description: "VCS root ID" },
25691
+ name: { type: "string", description: "Property name (e.g., branch, branchSpec, url)" },
25692
+ value: { type: "string", description: "Property value" }
25693
+ },
25694
+ required: ["id", "name", "value"]
25695
+ },
25696
+ handler: async (args) => {
25697
+ const schema = import_zod4.z.object({
25698
+ id: import_zod4.z.string().min(1),
25699
+ name: import_zod4.z.string().min(1),
25700
+ value: import_zod4.z.string()
25701
+ });
25702
+ return runTool(
25703
+ "set_vcs_root_property",
25704
+ schema,
25705
+ async (typed) => {
25706
+ const api = TeamCityAPI.getInstance();
25707
+ await api.vcsRoots.setVcsRootProperty(typed.id, typed.name, typed.value, {
25708
+ headers: { "Content-Type": "text/plain", Accept: "text/plain" }
25709
+ });
25710
+ return json({
25711
+ success: true,
25712
+ action: "set_vcs_root_property",
25713
+ id: typed.id,
25714
+ name: typed.name
25715
+ });
25716
+ },
25717
+ args
25718
+ );
25719
+ },
25720
+ mode: "full"
25721
+ },
25722
+ {
25723
+ name: "delete_vcs_root_property",
25724
+ description: "Delete a single VCS root property",
25725
+ inputSchema: {
25726
+ type: "object",
25727
+ properties: {
25728
+ id: { type: "string", description: "VCS root ID" },
25729
+ name: { type: "string", description: "Property name" }
25730
+ },
25731
+ required: ["id", "name"]
25732
+ },
25733
+ handler: async (args) => {
25734
+ const schema = import_zod4.z.object({ id: import_zod4.z.string().min(1), name: import_zod4.z.string().min(1) });
25735
+ return runTool(
25736
+ "delete_vcs_root_property",
25737
+ schema,
25738
+ async (typed) => {
25739
+ const api = TeamCityAPI.getInstance();
25740
+ await api.vcsRoots.deleteVcsRootProperty(typed.id, typed.name);
25741
+ return json({
25742
+ success: true,
25743
+ action: "delete_vcs_root_property",
25744
+ id: typed.id,
25745
+ name: typed.name
25746
+ });
25747
+ },
25748
+ args
25749
+ );
25750
+ },
25751
+ mode: "full"
25752
+ },
25753
+ {
25754
+ name: "update_vcs_root_properties",
25755
+ description: "Update common VCS root properties in one call",
25756
+ inputSchema: {
25757
+ type: "object",
25758
+ properties: {
25759
+ id: { type: "string", description: "VCS root ID" },
25760
+ url: { type: "string", description: "Repository URL" },
25761
+ branch: { type: "string", description: "Default branch (e.g., refs/heads/main)" },
25762
+ branchSpec: {
25763
+ oneOf: [
25764
+ { type: "string", description: "Branch spec as newline-delimited string" },
25765
+ { type: "array", items: { type: "string" }, description: "Array of branch spec lines" }
25766
+ ]
25767
+ },
25768
+ checkoutRules: { type: "string", description: "Checkout rules" }
25769
+ },
25770
+ required: ["id"]
25771
+ },
25772
+ handler: async (args) => {
25773
+ const schema = import_zod4.z.object({
25774
+ id: import_zod4.z.string().min(1),
25775
+ url: import_zod4.z.string().min(1).optional(),
25776
+ branch: import_zod4.z.string().min(1).optional(),
25777
+ branchSpec: import_zod4.z.union([import_zod4.z.string().min(1), import_zod4.z.array(import_zod4.z.string().min(1)).min(1)]).optional(),
25778
+ checkoutRules: import_zod4.z.string().min(1).optional()
25779
+ });
25780
+ return runTool(
25781
+ "update_vcs_root_properties",
25782
+ schema,
25783
+ async (typed) => {
25784
+ const api = TeamCityAPI.getInstance();
25785
+ const properties = [];
25786
+ if (typeof typed.url === "string") properties.push({ name: "url", value: typed.url });
25787
+ if (typeof typed.branch === "string")
25788
+ properties.push({ name: "branch", value: typed.branch });
25789
+ if (typeof typed.checkoutRules === "string")
25790
+ properties.push({ name: "checkout-rules", value: typed.checkoutRules });
25791
+ if (typed.branchSpec !== void 0) {
25792
+ const value = Array.isArray(typed.branchSpec) ? typed.branchSpec.join("\n") : typed.branchSpec;
25793
+ properties.push({ name: "branchSpec", value });
25794
+ }
25795
+ if (properties.length === 0) {
25796
+ return json({
25797
+ success: true,
25798
+ action: "update_vcs_root_properties",
25799
+ id: typed.id,
25800
+ updated: 0
25801
+ });
25802
+ }
25803
+ await api.vcsRoots.setVcsRootProperties(
25804
+ typed.id,
25805
+ void 0,
25806
+ { property: properties },
25807
+ { headers: { "Content-Type": "application/json", Accept: "application/json" } }
25808
+ );
25809
+ return json({
25810
+ success: true,
25811
+ action: "update_vcs_root_properties",
25812
+ id: typed.id,
25813
+ updated: properties.length
25814
+ });
25815
+ },
25816
+ args
25817
+ );
25818
+ },
25819
+ mode: "full"
25820
+ },
25684
25821
  // === Queue (read-only) ===
25685
25822
  {
25686
25823
  name: "list_queued_builds",