Skip to main content
Glama

add-relation-to-story

Link stories together in Shortcut by establishing relationships like blocks, duplicates, or relates to connections between project management items.

Instructions

Add a story relationship to a story

Input Schema

NameRequiredDescriptionDefault
storyPublicIdYesThe public ID of the story
relatedStoryPublicIdYesThe public ID of the related story
relationshipTypeNoThe type of relationshiprelates to

Input Schema (JSON Schema)

{ "properties": { "relatedStoryPublicId": { "description": "The public ID of the related story", "exclusiveMinimum": 0, "type": "number" }, "relationshipType": { "default": "relates to", "description": "The type of relationship", "enum": [ "relates to", "blocks", "blocked by", "duplicates", "duplicated by" ], "type": "string" }, "storyPublicId": { "description": "The public ID of the story", "exclusiveMinimum": 0, "type": "number" } }, "required": [ "storyPublicId", "relatedStoryPublicId" ], "type": "object" }

Implementation Reference

  • Registration of the 'add-relation-to-story' tool, including input schema using Zod and reference to the handler method.
    server.tool( "add-relation-to-story", "Add a story relationship to a story", { storyPublicId: z.number().positive().describe("The public ID of the story"), relatedStoryPublicId: z.number().positive().describe("The public ID of the related story"), relationshipType: z .enum(["relates to", "blocks", "blocked by", "duplicates", "duplicated by"]) .optional() .default("relates to") .describe("The type of relationship"), }, async (params) => await tools.addRelationToStory(params), );
  • The main handler function for the 'add-relation-to-story' tool. It validates inputs, fetches stories, adjusts relationship direction if needed (for 'blocked by' or 'duplicated by'), calls the Shortcut client to add the relation, and returns a success message.
    async addRelationToStory({ storyPublicId, relatedStoryPublicId, relationshipType, }: { storyPublicId: number; relatedStoryPublicId: number; relationshipType: "relates to" | "blocks" | "blocked by" | "duplicates" | "duplicated by"; }) { if (!storyPublicId) throw new Error("Story public ID is required"); if (!relatedStoryPublicId) throw new Error("Related story public ID is required"); const story = await this.client.getStory(storyPublicId); if (!story) throw new Error(`Failed to retrieve Shortcut story with public ID: ${storyPublicId}`); const relatedStory = await this.client.getStory(relatedStoryPublicId); if (!relatedStory) throw new Error(`Failed to retrieve Shortcut story with public ID: ${relatedStoryPublicId}`); let subjectStoryId = storyPublicId; let objectStoryId = relatedStoryPublicId; if (relationshipType === "blocked by" || relationshipType === "duplicated by") { relationshipType = relationshipType === "blocked by" ? "blocks" : "duplicates"; subjectStoryId = relatedStoryPublicId; objectStoryId = storyPublicId; } await this.client.addRelationToStory(subjectStoryId, objectStoryId, relationshipType); return this.toResult( relationshipType === "blocks" ? `Marked sc-${subjectStoryId} as a blocker to sc-${objectStoryId}.` : relationshipType === "duplicates" ? `Marked sc-${subjectStoryId} as a duplicate of sc-${objectStoryId}.` : `Added a relationship between sc-${subjectStoryId} and sc-${objectStoryId}.`, ); }
  • Zod input schema defining parameters for the 'add-relation-to-story' tool: story IDs and relationship type.
    storyPublicId: z.number().positive().describe("The public ID of the story"), relatedStoryPublicId: z.number().positive().describe("The public ID of the related story"), relationshipType: z .enum(["relates to", "blocks", "blocked by", "duplicates", "duplicated by"]) .optional() .default("relates to") .describe("The type of relationship"), },

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/ampcome-mcps/shortcut-mcp'

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