Skip to main content
Glama
alucardeht
by alucardeht

get_agent_context

Prepare agent-specific context for parallel implementation of a Figma design section, including responsibilities, assets, styles, and coordination instructions.

Instructions

Prepare agent context for parallel implementation of a section.

HOW IT WORKS:

  • Call after analyze_page_structure to identify sections

  • Returns complete context for a single agent to implement one section

  • Handles responsibilities: what to implement vs coordinate

  • Includes icons, styles, and transition element info

  • Generates agent-specific instructions with coordination rules

RETURNS:

  • section: Details (id, name, background color, bounds)

  • responsibilities: what agent implements, coordinates, or skips

  • assets: icons and images in this section

  • styles: colors, fonts, spacing specific to section

  • agent_info: index, total agents, is_first, is_last

  • instructions: detailed markdown instructions for this agent

TYPICAL WORKFLOW:

  1. analyze_page_structure → identify sections

  2. For each section: get_section_screenshot → visual reference

  3. get_agent_context(sectionId, agentIndex) → agent-specific context

  4. Each agent implements using provided context

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
file_keyYesFigma file key from URL
page_nameYesPage name (partial match)
frame_nameYesFrame name (partial match)
section_idYesSection ID from analyze_page_structure (e.g., 'section-0')
agent_indexNoZero-based agent index (default: 0)
total_agentsNoTotal number of agents working in parallel (default: 1)

Implementation Reference

  • Main handler function that executes the get_agent_context tool: fetches Figma data, identifies sections, extracts assets/styles/responsibilities, generates agent-specific instructions.
    export async function getAgentContext( ctx, fileKey, pageName, frameName, sectionId, agentIndex = 0, totalAgents = 1 ) { const { session, chunker, figmaClient } = ctx; session.setCurrentFile(fileKey); const file = await figmaClient.getFile(fileKey, 3); const page = figmaClient.findPageByName(file, pageName); if (!page) { const available = file.document.children.map((p) => p.name).join(", "); throw new Error(`Page "${pageName}" not found. Available: ${available}`); } const frameRef = figmaClient.findFrameByName(page, frameName); if (!frameRef) { const available = (page.children || []) .filter((c) => c.type === "FRAME" || c.type === "COMPONENT") .map((f) => f.name) .join(", "); throw new Error(`Frame "${frameName}" not found. Available: ${available}`); } const frame = await figmaClient.getNode(fileKey, frameRef.id); const sectionGroups = groupNodesBySection(frame.children || []); const sectionIndex = parseInt(sectionId.split("-")[1], 10); if (sectionIndex < 0 || sectionIndex >= sectionGroups.length) { throw new Error(`Invalid section ID: ${sectionId}. Available: section-0 to section-${sectionGroups.length - 1}`); } const sectionGroup = sectionGroups[sectionIndex]; const sectionName = inferSectionName(sectionGroup.nodes[0].name) || `Section ${sectionIndex + 1}`; const section = { id: sectionId, name: sectionName, bgColor: sectionGroup.bgColor || "#FFFFFF", bounds: { x: Math.round(sectionGroup.minY), y: Math.round(sectionGroup.minY), width: frame.absoluteBoundingBox?.width || 0, height: Math.round(sectionGroup.maxY - sectionGroup.minY), }, }; const sectionNodeIds = new Set(); const sectionNodes = []; for (const node of sectionGroup.nodes) { const collectNodeIds = (n) => { sectionNodeIds.add(n.id); sectionNodes.push(n); if (n.children) { n.children.forEach(collectNodeIds); } }; collectNodeIds(node); } const frameAssets = findAssets(frame, {}); const sectionAssets = extractSectionAssets(Array.from(sectionNodeIds), frameAssets); const enrichedAssets = { icons: sectionAssets.icons.map((a) => buildAssetDetails(a, fileKey, sectionName)), images: sectionAssets.images.map((a) => buildAssetDetails(a, fileKey, sectionName)), }; const sectionStyles = extractSectionStyles(sectionNodes); const responsibilities = { implements: sectionGroup.nodes.map((n) => n.name), coordinates: [], skips: [], }; const transitionElements = findTransitionElements(sectionGroups, frame.children || []); for (const element of transitionElements) { if (element.spansSections.includes(sectionId)) { responsibilities.coordinates.push(element.name); } } const allSectionIndices = new Set(); for (let i = 0; i < sectionGroups.length; i++) { allSectionIndices.add(i); } allSectionIndices.delete(sectionIndex); for (const idx of allSectionIndices) { for (const node of sectionGroups[idx].nodes) { responsibilities.skips.push(node.name); } } const agentInfo = { index: agentIndex, total: totalAgents, isFirst: agentIndex === 0, isLast: agentIndex === totalAgents - 1, }; const instructions = buildAgentInstructions(section, agentInfo, responsibilities, enrichedAssets, sectionStyles); const result = { section, responsibilities, assets: enrichedAssets, styles: sectionStyles, agentInfo, instructions, }; const response = chunker.wrapResponse(result, { step: `Prepared context for Agent ${agentIndex}`, progress: `${section.name} section (${agentIndex + 1}/${totalAgents})`, nextStep: "Agent can now implement this section with all necessary context", alert: `Agent responsible for: ${responsibilities.implements.join(", ")}`, }); return { content: [{ type: "text", text: JSON.stringify(response, null, 2) }] }; }
  • Input schema and description for the get_agent_context tool, defining parameters like file_key, page_name, frame_name, section_id, agent_index, total_agents.
    { name: "get_agent_context", description: `Prepare agent context for parallel implementation of a section. HOW IT WORKS: - Call after analyze_page_structure to identify sections - Returns complete context for a single agent to implement one section - Handles responsibilities: what to implement vs coordinate - Includes icons, styles, and transition element info - Generates agent-specific instructions with coordination rules RETURNS: - section: Details (id, name, background color, bounds) - responsibilities: what agent implements, coordinates, or skips - assets: icons and images in this section - styles: colors, fonts, spacing specific to section - agent_info: index, total agents, is_first, is_last - instructions: detailed markdown instructions for this agent TYPICAL WORKFLOW: 1. analyze_page_structure → identify sections 2. For each section: get_section_screenshot → visual reference 3. get_agent_context(sectionId, agentIndex) → agent-specific context 4. Each agent implements using provided context`, inputSchema: { type: "object", properties: { file_key: { type: "string", description: "Figma file key from URL", }, page_name: { type: "string", description: "Page name (partial match)", }, frame_name: { type: "string", description: "Frame name (partial match)", }, section_id: { type: "string", description: "Section ID from analyze_page_structure (e.g., 'section-0')", }, agent_index: { type: "number", description: "Zero-based agent index (default: 0)", default: 0, }, total_agents: { type: "number", description: "Total number of agents working in parallel (default: 1)", default: 1, }, }, required: ["file_key", "page_name", "frame_name", "section_id"], }, },
  • src/index.js:75-84 (registration)
    Tool registration in the main MCP server request handler switch statement, dispatching 'get_agent_context' calls to handlers.getAgentContext.
    case "get_agent_context": result = await handlers.getAgentContext( this.ctx, args.file_key, args.page_name, args.frame_name, args.section_id, args.agent_index || 0, args.total_agents || 1 );
  • Re-export of the getAgentContext handler from agentContext.js, making it available as handlers.getAgentContext.
    export { getAgentContext } from "./agentContext.js";

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/alucardeht/figma-mcp'

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