From 8fd2cefb48f922c1f368ed4fa5256c920debb90f Mon Sep 17 00:00:00 2001 From: Kristopher Overholt Date: Tue, 2 Dec 2025 13:51:43 -0600 Subject: [PATCH 1/2] Add Linear page to third-party tools --- docs/assets/tools-linear.png | Bin 0 -> 8150 bytes docs/tools/index.md | 10 +++ docs/tools/third-party/index.md | 10 +++ docs/tools/third-party/linear.md | 130 +++++++++++++++++++++++++++++++ mkdocs.yml | 1 + 5 files changed, 151 insertions(+) create mode 100644 docs/assets/tools-linear.png create mode 100644 docs/tools/third-party/linear.md diff --git a/docs/assets/tools-linear.png b/docs/assets/tools-linear.png new file mode 100644 index 0000000000000000000000000000000000000000..808875e1c936800bf56287acc99f17c8f09c3b75 GIT binary patch literal 8150 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 literal 0 HcmV?d00001 diff --git a/docs/tools/index.md b/docs/tools/index.md index f6c75bb71c..715a99d6f6 100644 --- a/docs/tools/index.md +++ b/docs/tools/index.md @@ -223,6 +223,16 @@ Check out the following pre-built tools that you can use with ADK agents: + +
+ Linear +
+
+

Linear

+

Manage issues, track projects, and streamline development

+
+
+
Notion diff --git a/docs/tools/third-party/index.md b/docs/tools/third-party/index.md index cdb3030225..c00b9e1fe4 100644 --- a/docs/tools/third-party/index.md +++ b/docs/tools/third-party/index.md @@ -89,6 +89,16 @@ Check out the following third-party tools that you can use with ADK agents:
+ +
+ Linear +
+
+

Linear

+

Manage issues, track projects, and streamline development

+
+
+
Notion diff --git a/docs/tools/third-party/linear.md b/docs/tools/third-party/linear.md new file mode 100644 index 0000000000..d217ff363b --- /dev/null +++ b/docs/tools/third-party/linear.md @@ -0,0 +1,130 @@ +# Linear + +The [Linear MCP Server](https://linear.app/docs/mcp) connects your ADK agent to +[Linear](https://linear.app/), a purpose-built tool for planning and building +products. This integration gives your agent the ability to manage issues, track +project cycles, and automate development workflows using natural language. + +## Use cases + +- **Streamline Issue Management**: Create, update, and organize issues using + natural language. Let your agent handle logging bugs, assigning tasks, and + updating statuses. + +- **Track Projects and Cycles**: Get instant visibility into your team's + momentum. Query the status of active cycles, check project milestones, and + retrieve deadlines. + +- **Contextual Search & Summarization**: Quickly catch up on long discussion + threads or find specific project specifications. Your agent can search + documentation and summarize complex issues. + +## Prerequisites + +- [Sign up](https://linear.app/signup) for a Linear account +- Generate an API key in + [Linear Settings > Security & access](https://linear.app/docs/security-and-access) + (if using API authentication) + +## Use with agent + +=== "Local MCP Server" + + ```python + from google.adk.agents import Agent + from google.adk.tools.mcp_tool import McpToolset + from google.adk.tools.mcp_tool.mcp_session_manager import StdioConnectionParams + from mcp import StdioServerParameters + + root_agent = Agent( + model="gemini-2.5-pro", + name="linear_agent", + instruction="Help users manage issues, projects, and cycles in Linear", + tools=[ + McpToolset( + connection_params=StdioConnectionParams( + server_params=StdioServerParameters( + command="npx", + args=[ + "-y", + "mcp-remote", + "https://mcp.linear.app/mcp", + ] + ), + ), + ) + ], + ) + ``` + + !!! note + + When you run this agent for the first time, a browser window will open + automatically to request access via OAuth. Alternatively, you can use + the authorization URL printed in the console. You must approve this + request to allow the agent to access your Linear data. + +=== "Remote MCP Server" + + ```python + from google.adk.agents import Agent + from google.adk.tools.mcp_tool import McpToolset + from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPServerParams + + LINEAR_API_KEY = "YOUR_LINEAR_API_KEY" + + root_agent = Agent( + model="gemini-2.5-pro", + name="linear_agent", + instruction="Help users manage issues, projects, and cycles in Linear", + tools=[ + McpToolset( + connection_params=StreamableHTTPServerParams( + url="https://mcp.linear.app/mcp", + headers={ + "Authorization": f"Bearer {LINEAR_API_KEY}", + }, + ), + ) + ], + ) + ``` + + !!! note + + This code example uses an API key for authentication. To use a + browser-based OAuth authentication flow instead, remove the `headers` + parameter and run the agent. + +## Available tools + +Tool | Description +---- | ----------- +`list_comments` | List comments on an issue +`create_comment` | Create a comment on an issue +`list_cycles` | List cycles in a project +`get_document` | Get a document +`list_documents` | List documents +`get_issue` | Get an issue +`list_issues` | List issues +`create_issue` | Create an issue +`update_issue` | Update an issue +`list_issue_statuses` | List issue statuses +`get_issue_status` | Get an issue status +`list_issue_labels` | List issue labels +`create_issue_label` | Create an issue label +`list_projects` | List projects +`get_project` | Get a project +`create_project` | Create a project +`update_project` | Update a project +`list_project_labels` | List project labels +`list_teams` | List teams +`get_team` | Get a team +`list_users` | List users +`get_user` | Get a user +`search_documentation` | Search documentation + +## Additional resources + +- [Linear MCP Server Documentation](https://linear.app/docs/mcp) +- [Linear Getting Started Guide](https://linear.app/docs/start-guide) diff --git a/mkdocs.yml b/mkdocs.yml index 79f1aab0a6..c58a2500c4 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -186,6 +186,7 @@ nav: - GitHub: tools/third-party/github.md - GitLab: tools/third-party/gitlab.md - Hugging Face: tools/third-party/hugging-face.md + - Linear: tools/third-party/linear.md - Notion: tools/third-party/notion.md - ScrapeGraphAI: tools/third-party/scrapegraphai.md - Tavily: tools/third-party/tavily.md From 277f77792b67bce34e94392808a8178d0e92b046 Mon Sep 17 00:00:00 2001 From: Kristopher Overholt Date: Tue, 2 Dec 2025 15:04:25 -0600 Subject: [PATCH 2/2] Add timeout --- docs/tools/third-party/linear.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/tools/third-party/linear.md b/docs/tools/third-party/linear.md index d217ff363b..7259e547b9 100644 --- a/docs/tools/third-party/linear.md +++ b/docs/tools/third-party/linear.md @@ -51,6 +51,7 @@ project cycles, and automate development workflows using natural language. "https://mcp.linear.app/mcp", ] ), + timeout=30, ), ) ],