Skip to main content
Glama

Spreadsheet MCP Server

by HosakaKeigo
getSheetData.ts2.54 kB
/** * シートデータ取得ツール */ import { z } from "zod"; import { extractSpreadsheetId, getSpreadsheetInfo, getSheetData } from "../api/spreadsheet.js"; import { formatSheetData } from "../utils/format.js"; /** * シートデータ取得ツール * 指定されたスプレッドシートから特定のシートのデータを取得 */ export const getSheetDataTool = { name: "getSheetData", description: "スプレッドシートの特定シートのデータを取得", schema: { url: z.string().describe("スプレッドシートのURL"), sheetName: z.string().describe("取得するシート名") }, handler: async ({ url, sheetName }: { url: string; sheetName: string }) => { try { const spreadsheetId = extractSpreadsheetId(url); if (!spreadsheetId) { return { content: [ { type: "text" as const, text: "有効なスプレッドシートURLではありません。Google SpreadsheetのURLを入力してください。" } ], isError: true }; } // スプレッドシート情報を取得して、シート名が有効かチェック const spreadsheetInfo = await getSpreadsheetInfo(spreadsheetId); const isValidSheet = spreadsheetInfo.sheets.some(sheet => sheet.name === sheetName); if (!isValidSheet) { const availableSheets = spreadsheetInfo.sheets.map(sheet => sheet.name).join(", "); return { content: [ { type: "text" as const, text: `シート「${sheetName}」は存在しません。利用可能なシート: ${availableSheets}` } ], isError: true }; } // シートデータを取得 const sheetData = await getSheetData(spreadsheetId, sheetName); // データをフォーマットして返す const formattedResult = formatSheetData(sheetData, sheetName, spreadsheetInfo.name); return { content: [ { type: "text" as const, text: formattedResult } ] }; } catch (error) { console.error("シートデータ取得エラー:", error); return { content: [ { type: "text" as const, text: `シートデータの取得中にエラーが発生しました: ${error instanceof Error ? error.message : String(error)}` } ], isError: true }; } } };

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/HosakaKeigo/spreadsheet-mcp-server'

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