Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2025 FigmaAI
Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand All @@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
SOFTWARE.
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@
> [!TIP]
> This project is a Kotlin Compose Desktop application ported from [@sonnylazuardi](https://github.com/sonnylazuardi)'s [**cursor-talk-to-figma-mcp**](https://github.com/sonnylazuardi/cursor-talk-to-figma-mcp) project, enabling direct WebSocket and MCP server capabilities. We deeply appreciate the innovative ideas and implementation of the original project.

## ⚠️ Disclaimer

> [!IMPORTANT]
> **This project is not affiliated with, sponsored by, or endorsed by Figma, Inc.** This is an independent, community-developed open source project that provides interoperability with Figma's platform. "Figma" is a trademark of Figma, Inc. The use of the Figma name in this project is purely descriptive, indicating the software's functionality to interact with Figma files and the Figma API.

## Features

- 🚀 **Start/Stop Servers**: Control WebSocket and MCP servers from tray menu
Expand Down
8 changes: 7 additions & 1 deletion app/src/main/kotlin/kr/co/metadata/mcp/App.kt
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp

import androidx.compose.runtime.*
Expand Down Expand Up @@ -1345,4 +1351,4 @@ fun main() {
analyticsService = analyticsService
)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.analytics

import mu.KotlinLogging
Expand Down Expand Up @@ -113,4 +119,4 @@ class AnalyticsConfig {
val arch = System.getProperty("os.arch")
return "$os $osVersion ($arch)"
}
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.analytics

import mu.KotlinLogging
Expand Down Expand Up @@ -40,4 +46,4 @@ class CrashHandler(private val analytics: GoogleAnalyticsService? = null) {
fun cleanup() {
logger.info { "Crash handler cleaned up" }
}
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.analytics

import java.awt.Toolkit
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.mcp

import io.modelcontextprotocol.kotlin.sdk.*
Expand Down Expand Up @@ -359,4 +365,4 @@ object AnnotationService : BaseFigmaService() {
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.mcp

import kr.co.metadata.mcp.mcp.validation.ValidationResult
Expand Down Expand Up @@ -382,4 +388,4 @@ abstract class BaseFigmaService {
if (default != null) put("default", default)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.mcp

import io.modelcontextprotocol.kotlin.sdk.*
Expand Down Expand Up @@ -188,4 +194,4 @@ object ComponentService : BaseFigmaService() {
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.mcp

import io.modelcontextprotocol.kotlin.sdk.*
Expand Down Expand Up @@ -329,4 +335,4 @@ object CreationService : BaseFigmaService() {
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.mcp

import io.modelcontextprotocol.kotlin.sdk.*
Expand Down Expand Up @@ -217,4 +223,4 @@ object DocumentService : BaseFigmaService() {
}
}
}
}
}
8 changes: 7 additions & 1 deletion app/src/main/kotlin/kr/co/metadata/mcp/mcp/ExportService.kt
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.mcp

import io.modelcontextprotocol.kotlin.sdk.Tool
Expand Down Expand Up @@ -72,4 +78,4 @@ object ExportService : BaseFigmaService() {
}
}
}
}
}
8 changes: 7 additions & 1 deletion app/src/main/kotlin/kr/co/metadata/mcp/mcp/FigmaMcpTools.kt
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.mcp

import io.modelcontextprotocol.kotlin.sdk.*
Expand Down Expand Up @@ -104,4 +110,4 @@ object FigmaMcpTools {

logger.info { "All Figma MCP prompts registered successfully" }
}
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.mcp

import io.modelcontextprotocol.kotlin.sdk.*
Expand Down Expand Up @@ -628,4 +634,4 @@ This detailed process ensures you correctly interpret the reaction data, prepare
}
}
*/
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.mcp

import io.modelcontextprotocol.kotlin.sdk.*
Expand Down Expand Up @@ -192,4 +198,4 @@ object LayoutManagementService : BaseFigmaService() {
}
}
}
}
}
8 changes: 7 additions & 1 deletion app/src/main/kotlin/kr/co/metadata/mcp/mcp/LayoutService.kt
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.mcp

import io.modelcontextprotocol.kotlin.sdk.*
Expand Down Expand Up @@ -258,4 +264,4 @@ object LayoutService : BaseFigmaService() {
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.mcp

import io.modelcontextprotocol.kotlin.sdk.*
Expand Down Expand Up @@ -130,4 +136,4 @@ object PrototypeService : BaseFigmaService() {
}
}
*/
}
}
8 changes: 7 additions & 1 deletion app/src/main/kotlin/kr/co/metadata/mcp/mcp/StyleService.kt
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.mcp

import io.modelcontextprotocol.kotlin.sdk.*
Expand Down Expand Up @@ -226,4 +232,4 @@ object StyleService : BaseFigmaService() {
}
}
}
}
}
8 changes: 7 additions & 1 deletion app/src/main/kotlin/kr/co/metadata/mcp/mcp/TextService.kt
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.mcp

import io.modelcontextprotocol.kotlin.sdk.*
Expand Down Expand Up @@ -246,4 +252,4 @@ object TextService : BaseFigmaService() {
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.mcp.validation

import kotlinx.serialization.Serializable
Expand Down Expand Up @@ -433,4 +439,4 @@ val exportNodeAsImageValidator = validator<ExportNodeAsImageRequest> { request -
}
}



8 changes: 7 additions & 1 deletion app/src/main/kotlin/kr/co/metadata/mcp/server/McpServer.kt
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.server

import io.modelcontextprotocol.kotlin.sdk.*
Expand Down Expand Up @@ -696,4 +702,4 @@ class McpServer {
throw e
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.server

import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
Expand Down Expand Up @@ -222,4 +228,4 @@ class WebSocketServer(port: Int = DEFAULT_PORT) : WebSocketServer(InetSocketAddr
override fun onStart() {
logger.info { "🚀 WebSocket server started on port $port" }
}
}
}
6 changes: 6 additions & 0 deletions app/src/main/kotlin/kr/co/metadata/mcp/ui/OpenSourceDialog.kt
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.ui

import androidx.compose.foundation.layout.*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright 2026 Grabtaxi Holdings Pte Ltd (GRAB), All rights reserved.
*
* Use of this source code is governed by an MIT-style license that can be found in the LICENSE file
*/

package kr.co.metadata.mcp.ui

import androidx.compose.foundation.layout.*
Expand Down Expand Up @@ -248,4 +254,4 @@ fun ServerErrorDialog(
}
}
}
}
}
Loading