Skip to main content
Glama

create_project_field

Add custom fields to GitHub projects to track specific data types like text, numbers, dates, or selections for better organization and workflow management.

Instructions

Create a custom field for a GitHub project

Input Schema

NameRequiredDescriptionDefault
projectIdYes
nameYes
typeYes
optionsNo
descriptionNo
requiredNo

Input Schema (JSON Schema)

{ "properties": { "description": { "type": "string" }, "name": { "type": "string" }, "options": { "items": { "properties": { "color": { "type": "string" }, "description": { "type": "string" }, "name": { "type": "string" } }, "required": [ "name" ], "type": "object" }, "type": "array" }, "projectId": { "type": "string" }, "required": { "type": "boolean" }, "type": { "enum": [ "text", "number", "date", "single_select", "iteration", "milestone", "assignees", "labels" ] } }, "required": [ "projectId", "name", "type" ], "type": "object" }

Implementation Reference

  • Core handler function that executes the GitHub GraphQL 'createProjectV2Field' mutation to create a custom field in a project. Matches the tool arguments perfectly (projectId, name, type, options, etc.).
    async createField(projectId: ProjectId, field: Omit<CustomField, "id">): Promise<CustomField> { const mutation = ` mutation($input: CreateProjectV2FieldInput!) { createProjectV2Field(input: $input) { projectV2Field { id name dataType } } } `; try { const githubFieldType = mapToGraphQLFieldType(field.type); const variables: any = { input: { projectId, dataType: githubFieldType, name: field.name, } }; if (field.type === 'single_select' && field.options && field.options.length > 0) { variables.input.singleSelectOptions = field.options.map(option => ({ name: option.name, description: option.description || null, color: option.color || null })); } if (field.type === 'iteration' && field.config) { if (field.config.iterationDuration) { variables.input.iterationDuration = field.config.iterationDuration; } if (field.config.iterationStart) { variables.input.iterationStartDate = field.config.iterationStart; } } const response = await this.graphql<CreateProjectV2FieldResponse>(mutation, variables); const createdField = response.createProjectV2Field.projectV2Field; // Since the createdField object doesn't have a dataType property, we need to fetch it const fieldDetails = await this.getField(projectId, createdField.id); return { id: createdField.id, name: createdField.name, type: fieldDetails?.type || field.type, // Use fetched type or fallback to original options: field.options || [], description: field.description, required: field.required || false, defaultValue: field.defaultValue, validation: field.validation, config: field.config }; } catch (error) { this.logger.error(`Failed to create field ${field.name} for project ${projectId}`, error); throw this.handleGraphQLError(error); } }
  • Zod schema defining the input parameters and validation for the create_project_field tool.
    // Schema for create_project_field tool export const createProjectFieldSchema = z.object({ projectId: z.string().min(1, "Project ID is required"), name: z.string().min(1, "Field name is required"), type: z.enum([ "text", "number", "date", "single_select", "iteration", "milestone", "assignees", "labels" ]), options: z.array( z.object({ name: z.string().min(1), description: z.string().optional(), color: z.string().optional(), }) ).optional(), description: z.string().optional(), required: z.boolean().optional(), }); export type CreateProjectFieldArgs = z.infer<typeof createProjectFieldSchema>;
  • Registration of the createProjectFieldTool in the central ToolRegistry singleton.
    // Register project field tools this.registerTool(createProjectFieldTool); this.registerTool(listProjectFieldsTool); this.registerTool(updateProjectFieldTool);
  • ToolDefinition export containing name, description, schema reference, and examples for MCP tool listing.
    export const createProjectFieldTool: ToolDefinition<CreateProjectFieldArgs> = { name: "create_project_field", description: "Create a custom field for a GitHub project", schema: createProjectFieldSchema as unknown as ToolSchema<CreateProjectFieldArgs>, examples: [ { name: "Create status field", description: "Create a status dropdown field for a project", args: { projectId: "PVT_kwDOLhQ7gc4AOEbH", name: "Status", type: "single_select", options: [ { name: "To Do", color: "red" }, { name: "In Progress", color: "yellow" }, { name: "Done", color: "green" } ], description: "Current status of the task", required: true } } ] };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/HarshKumarSharma/MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server