@flowrelay/mcp-server 1.0.2 → 1.0.3

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.
package/README.md CHANGED
@@ -9,7 +9,7 @@ It connects to Flow Relay API v1 using an API key and supports:
9
9
  ## Package
10
10
 
11
11
  - Name: @flowrelay/mcp-server
12
- - Version: 1.0.0
12
+ - Version: 1.0.3
13
13
 
14
14
  ## What Is Included
15
15
 
@@ -18,12 +18,14 @@ The server currently exposes these tools:
18
18
  - get_workspace_context
19
19
  - list_projects
20
20
  - set_active_project
21
- - list_filter_options (lists the selectable resources, branches, event types and priorities per source for a project – call this before generating so handoff/insight filters use real values instead of guesses)
21
+ - list_filter_options (lists the selectable resources, branches, event types and priorities per source for a project – call this before generating so handoff/insight filters use real values instead of guesses; also reports whether Figma is selectable, since Figma requires the project's processing region to be Global)
22
22
  - list_handoffs (returns project-specific handoffs, or an aggregated view of all accessible project handoffs if no project is active; filter by status: active, archived, or all)
23
23
  - generate_handoff (processed asynchronously, and the server automatically polls until the job finishes. Requires active project or project_id. Accepts per-source filters: projects, eventTypes, branches, priorities.)
24
24
  - generate_correlation_insight (accepts per-source filters)
25
25
  - generate_onboarding_brief (accepts per-source filters)
26
26
  - generate_architecture_insight (accepts per-source filters)
27
+
28
+ Selecting Figma in `sources` or `filters` attaches visual context to the generation (rendered frame previews plus the indexed design scene: layout, texts, prototype flows). It works on projects whose processing region is Global and adds a flat 1-credit surcharge per generation.
27
29
  - list_insights
28
30
  - list_integrations
29
31
  - list_events
package/dist/api.d.ts CHANGED
@@ -126,6 +126,13 @@ export interface AvailableSourceFilter {
126
126
  }[];
127
127
  }
128
128
  export type AvailableFilters = Record<string, AvailableSourceFilter>;
129
+ export interface FigmaGateInfo {
130
+ selectable: boolean;
131
+ region: string;
132
+ scope: string;
133
+ canManageResidency: boolean;
134
+ residencyHref: string | null;
135
+ }
129
136
  export declare class FlowRelayAPI {
130
137
  private baseUrl;
131
138
  private apiKey;
@@ -133,7 +140,10 @@ export declare class FlowRelayAPI {
133
140
  private requestRaw;
134
141
  private request;
135
142
  listProjects(): Promise<TenantContext>;
136
- getHandoffFilters(projectId: string): Promise<AvailableFilters>;
143
+ getHandoffFilters(projectId: string): Promise<{
144
+ filters: AvailableFilters;
145
+ figma: FigmaGateInfo | null;
146
+ }>;
137
147
  listHandoffs(status?: string, limit?: number, projectId?: string | null): Promise<{
138
148
  handoffs: HandoffResult[];
139
149
  }>;
package/dist/api.js CHANGED
@@ -35,8 +35,8 @@ export class FlowRelayAPI {
35
35
  return this.request('/projects');
36
36
  }
37
37
  async getHandoffFilters(projectId) {
38
- const { filters } = await this.request(`/handoffs/filters?project_id=${encodeURIComponent(projectId)}`);
39
- return filters ?? {};
38
+ const { filters, figma } = await this.request(`/handoffs/filters?project_id=${encodeURIComponent(projectId)}`);
39
+ return { filters: filters ?? {}, figma: figma ?? null };
40
40
  }
41
41
  async listHandoffs(status = 'active', limit = 10, projectId) {
42
42
  const params = new URLSearchParams();
package/dist/index.js CHANGED
@@ -454,7 +454,7 @@ server.tool('list_filter_options', 'List the real per-source filter values (reso
454
454
  }, async ({ project_id }) => {
455
455
  try {
456
456
  const resolved = await requireProject(project_id);
457
- const filters = await api.getHandoffFilters(resolved.projectId);
457
+ const { filters, figma } = await api.getHandoffFilters(resolved.projectId);
458
458
  const sources = Object.keys(filters);
459
459
  if (sources.length === 0) {
460
460
  return { content: [{ type: 'text', text: `No connected sources with filter options for ${resolved.project.name}.` }] };
@@ -475,6 +475,12 @@ server.tool('list_filter_options', 'List the real per-source filter values (reso
475
475
  lines.push(`- Priorities: ${f.priorities.map((p) => p.value).join(', ')}`);
476
476
  return lines.join('\n');
477
477
  });
478
+ if (figma && !figma.selectable) {
479
+ blocks.push('### figma\n- NOT selectable on this project: Figma visual context requires the Global processing region. ' +
480
+ (figma.canManageResidency
481
+ ? 'Switch the project to Global in its Data Residency settings first.'
482
+ : 'Ask an organization admin to switch the project to Global first.'));
483
+ }
478
484
  return { content: [{ type: 'text', text: `Filter options for ${resolved.project.name}:\n\n${blocks.join('\n\n')}` }] };
479
485
  }
480
486
  catch (err) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowrelay/mcp-server",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "Flow Relay MCP Server for Claude Desktop and Claude Code – handoffs, integrations, and context events via natural conversation.",
5
5
  "type": "module",
6
6
  "license": "MIT",