get_field_value
Extract specific field values from GitHub project items, supporting all field types including text, numbers, dates, and custom selections. Facilitates data retrieval for project management and tracking.
Instructions
Get a field value for a GitHub project item. Supports reading all field types: TEXT, NUMBER, DATE, SINGLE_SELECT, ITERATION, MILESTONE, ASSIGNEES, LABELS
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| fieldId | Yes | ||
| itemId | Yes | ||
| projectId | Yes |
Implementation Reference
- Main handler function that executes the get_field_value tool. Uses GraphQL to query GitHub Projects v2 API for the specific field value on a project item, supporting all field types (TEXT, NUMBER, DATE, SINGLE_SELECT, ITERATION, MILESTONE, ASSIGNEES, LABELS). Extracts and formats the value appropriately.async getFieldValue(data: { projectId: string; itemId: string; fieldId: string; }): Promise<{ fieldName: string; value: any; fieldType: string }> { try { const query = ` query($projectId: ID!, $itemId: ID!, $fieldId: ID!) { node(id: $projectId) { ... on ProjectV2 { item(id: $itemId) { fieldValueByName(name: $fieldId) { ... on ProjectV2ItemFieldTextValue { text field { ... on ProjectV2Field { name dataType } } } ... on ProjectV2ItemFieldNumberValue { number field { ... on ProjectV2Field { name dataType } } } ... on ProjectV2ItemFieldDateValue { date field { ... on ProjectV2Field { name dataType } } } ... on ProjectV2ItemFieldSingleSelectValue { name field { ... on ProjectV2SingleSelectField { name dataType } } } ... on ProjectV2ItemFieldIterationValue { iterationId title field { ... on ProjectV2IterationField { name dataType } } } ... on ProjectV2ItemFieldMilestoneValue { milestoneId title field { ... on ProjectV2MilestoneField { name dataType } } } ... on ProjectV2ItemFieldUserValue { users { nodes { id login } } field { ... on ProjectV2AssigneesField { name dataType } } } ... on ProjectV2ItemFieldLabelValue { labels { nodes { id name } } field { ... on ProjectV2LabelsField { name dataType } } } } } } } } `; interface FieldValueResponse { node: { item: { fieldValueByName: { text?: string; number?: number; date?: string; name?: string; iterationId?: string; title?: string; milestoneId?: string; users?: { nodes: Array<{ id: string; login: string; }>; }; labels?: { nodes: Array<{ id: string; name: string; }>; }; field: { name: string; dataType: string; } } } } } const response = await this.factory.graphql<FieldValueResponse>(query, { projectId: data.projectId, itemId: data.itemId, fieldId: data.fieldId }); if (!response.node?.item?.fieldValueByName) { throw new ResourceNotFoundError(ResourceType.FIELD, data.fieldId); } const fieldValue = response.node.item.fieldValueByName; const field = fieldValue.field; let value = null; // Extract the value based on the field type if ('text' in fieldValue && fieldValue.text !== undefined) { value = fieldValue.text; } else if ('number' in fieldValue && fieldValue.number !== undefined) { value = fieldValue.number; } else if ('date' in fieldValue && fieldValue.date !== undefined) { value = fieldValue.date; } else if ('name' in fieldValue && fieldValue.name !== undefined) { value = fieldValue.name; } else if ('iterationId' in fieldValue && fieldValue.iterationId !== undefined) { value = { iterationId: fieldValue.iterationId, title: fieldValue.title }; } else if ('milestoneId' in fieldValue && fieldValue.milestoneId !== undefined) { value = { milestoneId: fieldValue.milestoneId, title: fieldValue.title }; } else if ('users' in fieldValue && fieldValue.users?.nodes) { value = fieldValue.users.nodes.map(user => ({ id: user.id, login: user.login })); } else if ('labels' in fieldValue && fieldValue.labels?.nodes) { value = fieldValue.labels.nodes.map(label => ({ id: label.id, name: label.name })); } return { fieldName: field.name, value, fieldType: field.dataType }; } catch (error) { throw this.mapErrorToMCPError(error); } }
- Tool definition including schema, description, and examples for get_field_value. Defines input parameters: projectId, itemId, fieldId. Zod schema validation.export const getFieldValueTool: ToolDefinition<GetFieldValueArgs> = { name: "get_field_value", description: "Get a field value for a GitHub project item. Supports reading all field types: TEXT, NUMBER, DATE, SINGLE_SELECT, ITERATION, MILESTONE, ASSIGNEES, LABELS", schema: getFieldValueSchema as unknown as ToolSchema<GetFieldValueArgs>, examples: [ { name: "Get text field value", description: "Get the current text value for an item", args: { projectId: "PVT_kwDOLhQ7gc4AOEbH", itemId: "PVTI_lADOLhQ7gc4AOEbHzM4AOAJ7", fieldId: "PVTF_lADOLhQ7gc4AOEbHzM4AOAI1" } }, { name: "Get status field value", description: "Get the current status (single select) value for an item", args: { projectId: "PVT_kwDOLhQ7gc4AOEbH", itemId: "PVTI_lADOLhQ7gc4AOEbHzM4AOAJ7", fieldId: "PVTF_lADOLhQ7gc4AOEbHzM4AOAI2" } }, { name: "Get iteration field value", description: "Get the current iteration/sprint assignment for an item", args: { projectId: "PVT_kwDOLhQ7gc4AOEbH", itemId: "PVTI_lADOLhQ7gc4AOEbHzM4AOAJ7", fieldId: "PVTF_lADOLhQ7gc4AOEbHzM4AOAI3" } }, { name: "Get milestone field value", description: "Get the current milestone assignment for an item", args: { projectId: "PVT_kwDOLhQ7gc4AOEbH", itemId: "PVTI_lADOLhQ7gc4AOEbHzM4AOAJ7", fieldId: "PVTF_lADOLhQ7gc4AOEbHzM4AOAI4" } }, { name: "Get assignees field value", description: "Get the current assignees for an item", args: { projectId: "PVT_kwDOLhQ7gc4AOEbH", itemId: "PVTI_lADOLhQ7gc4AOEbHzM4AOAJ7", fieldId: "PVTF_lADOLhQ7gc4AOEbHzM4AOAI5" } }, { name: "Get labels field value", description: "Get the current labels for an item", args: { projectId: "PVT_kwDOLhQ7gc4AOEbH", itemId: "PVTI_lADOLhQ7gc4AOEbHzM4AOAJ7", fieldId: "PVTF_lADOLhQ7gc4AOEbHzM4AOAI6" } } ] };
- src/infrastructure/tools/ToolRegistry.ts:259-262 (registration)Registration of getFieldValueTool in the central ToolRegistry singleton during built-in tools initialization.// Register field value tools this.registerTool(setFieldValueTool); this.registerTool(getFieldValueTool); this.registerTool(clearFieldValueTool);
- src/index.ts:424-425 (handler)MCP server dispatch handler that routes get_field_value tool calls to ProjectManagementService.getFieldValue method.case "get_field_value": return await this.service.getFieldValue(args);
- Zod input schema validation for get_field_value tool parameters.export const getFieldValueSchema = z.object({ projectId: z.string().min(1, "Project ID is required"), itemId: z.string().min(1, "Item ID is required"), fieldId: z.string().min(1, "Field ID is required"), }); export type GetFieldValueArgs = z.infer<typeof getFieldValueSchema>;