@pschroee/redmine-mcp 0.5.10 → 0.5.11

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.
@@ -125,9 +125,12 @@ export declare function formatCategory(response: {
125
125
  */
126
126
  export declare function formatCustomFieldList(response: RedmineCustomFieldsResponse): string;
127
127
  /**
128
- * Project lookup map: ID -> name
128
+ * Project lookup map: ID -> { name, identifier }
129
129
  */
130
- export type ProjectLookup = Record<number, string>;
130
+ export type ProjectLookup = Record<number, {
131
+ name: string;
132
+ identifier: string;
133
+ }>;
131
134
  /**
132
135
  * Format a list of saved queries as a Markdown table
133
136
  */
@@ -184,16 +184,24 @@ export function formatQueryList(response, projectLookup = {}) {
184
184
  const lines = [];
185
185
  lines.push(`# Saved Queries (${queries.length})`);
186
186
  lines.push("");
187
- lines.push("| ID | Name | Project | Visibility |");
188
- lines.push("|----|------|---------|------------|");
187
+ lines.push("| ID | Name | Project | Project Identifier | Visibility |");
188
+ lines.push("|----|------|---------|-------------------|------------|");
189
189
  for (const query of queries) {
190
190
  const visibility = query.is_public ? "Public" : "Private";
191
- let project = "Global";
191
+ let projectName = "";
192
+ let projectIdentifier = "";
192
193
  if (query.project_id) {
193
- const projectName = projectLookup[query.project_id];
194
- project = projectName ? `${projectName} (${query.project_id})` : `#${query.project_id}`;
194
+ const projectInfo = projectLookup[query.project_id];
195
+ if (projectInfo) {
196
+ projectName = projectInfo.name;
197
+ projectIdentifier = projectInfo.identifier;
198
+ }
199
+ else {
200
+ projectName = `#${query.project_id}`;
201
+ projectIdentifier = `#${query.project_id}`;
202
+ }
195
203
  }
196
- lines.push(`| ${query.id} | ${query.name} | ${project} | ${visibility} |`);
204
+ lines.push(`| ${query.id} | ${query.name} | ${projectName} | ${projectIdentifier} | ${visibility} |`);
197
205
  }
198
206
  return lines.join("\n");
199
207
  }
@@ -129,13 +129,13 @@ export function registerMetadataTools(server, client) {
129
129
  content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
130
130
  };
131
131
  }
132
- // Build project lookup for resolving project names
132
+ // Build project lookup for resolving project names and identifiers
133
133
  const projectLookup = {};
134
134
  const projectsResult = await client.listProjects({ limit: 100 });
135
135
  let filterProjectId;
136
136
  if (!("error" in projectsResult)) {
137
137
  for (const project of projectsResult.projects) {
138
- projectLookup[project.id] = project.name;
138
+ projectLookup[project.id] = { name: project.name, identifier: project.identifier };
139
139
  // Find the numeric ID for the filter project identifier
140
140
  if (params.project_id && project.identifier === params.project_id) {
141
141
  filterProjectId = project.id;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pschroee/redmine-mcp",
3
- "version": "0.5.10",
3
+ "version": "0.5.11",
4
4
  "description": "MCP server for Redmine - full API access with configurable tool groups",
5
5
  "type": "module",
6
6
  "bin": {