{"id":3183,"date":"2025-12-10T15:15:32","date_gmt":"2025-12-10T06:15:32","guid":{"rendered":"https:\/\/www.agile-software.site\/?p=3183"},"modified":"2025-12-12T15:10:23","modified_gmt":"2025-12-12T06:10:23","slug":"snowflake%e3%81%ab%e3%81%8a%e3%81%91%e3%82%8bmcp%e8%a8%ad%e5%ae%9a","status":"publish","type":"post","link":"https:\/\/agile-software.net\/?p=3183","title":{"rendered":"snowflake\u306b\u304a\u3051\u308bmcp\u8a2d\u5b9a"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u30ab\u30b9\u30bf\u30e0\u30b5\u30fc\u30d3\u30b9\uff08MCP\uff09\u3092Snowflake\u3068\u9023\u643a\u3055\u305b\u308b\u65b9\u6cd5\uff1a<code>mcp-snowflake-service<\/code> \u306e\u6d3b\u7528<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">&#x1f4a1; \u306f\u3058\u3081\u306b<\/h3>\n\n\n\n<p>Snowflake\u306f\u5f37\u529b\u306a\u30c7\u30fc\u30bf\u30a6\u30a7\u30a2\u30cf\u30a6\u30b9\u3067\u3059\u304c\u3001\u30ab\u30b9\u30bf\u30e0\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3084\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3092\u30bb\u30ad\u30e5\u30a2\u306b\u9023\u643a\u3055\u305b\u308b\u305f\u3081\u306b\u306f\u3001\u9069\u5207\u306a\u30d7\u30ed\u30ad\u30b7\u3084\u30b5\u30fc\u30d3\u30b9\u30ec\u30a4\u30e4\u30fc\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u672c\u8a18\u4e8b\u3067\u306f\u3001GitHub\u3067\u516c\u958b\u3055\u308c\u3066\u3044\u308b <code>datawiz168\/mcp-snowflake-service<\/code> \u3092\u5229\u7528\u3057\u3066\u3001Snowflake\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u30ab\u30b9\u30bf\u30e0\u30b5\u30fc\u30d3\u30b9\u3092\u7c21\u5358\u306b\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u65b9\u6cd5\u3092\u3001\u7279\u306b\u8a8d\u8a3c\u3068\u63a5\u7d9a\u306e\u5074\u9762\u306b\u7126\u70b9\u3092\u5f53\u3066\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">&#x1f680; \u30b9\u30c6\u30c3\u30d7 1: \u524d\u63d0\u6761\u4ef6\u3068\u74b0\u5883\u8a2d\u5b9a<\/h4>\n\n\n\n<p>\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306fGo\u8a00\u8a9e\u3067\u8a18\u8ff0\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001Go\u74b0\u5883\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">1. \u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30af\u30ed\u30fc\u30f3\u3068\u74b0\u5883\u6e96\u5099<\/h5>\n\n\n\n<p>\u307e\u305a\u3001GitHub\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30ed\u30fc\u30ab\u30eb\u306b\u30af\u30ed\u30fc\u30f3\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u627f\u77e5\u3044\u305f\u3057\u307e\u3057\u305f\u3002GitHub\u30ea\u30dd\u30b8\u30c8\u30ea <code>datawiz168\/mcp-snowflake-service<\/code> \u3092\u4f7f\u7528\u3057\u3066\u3001Snowflake\u306eMCP\uff08Multi-Cluster Protocol \u307e\u305f\u306f Multi-Channel Protocol \u3092\u6307\u3057\u3066\u3044\u308b\u3068\u60f3\u5b9a\u3055\u308c\u307e\u3059\u304c\u3001\u3053\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3067\u306f\u6050\u3089\u304f<strong>Custom\/Micro-service Proxy<\/strong>\u306e\u610f\u56f3\u3068\u89e3\u91c8\u3057\u3001\u3053\u3053\u3067\u306f<strong>\u30ab\u30b9\u30bf\u30e0\u30b5\u30fc\u30d3\u30b9<\/strong>\u3068\u8868\u8a18\u3057\u307e\u3059\uff09\u30b5\u30fc\u30d0\u30fc\u3092\u8a2d\u5b9a\u3059\u308b\u65b9\u6cd5\u3092\u89e3\u8aac\u3059\u308b\u30d6\u30ed\u30b0\u8a18\u4e8b\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><a href=\"https:\/\/github.com\/datawiz168\/mcp-snowflake-service\">https:\/\/github.com\/datawiz168\/mcp-snowflake-service<\/a><\/p>\n<\/blockquote>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>git clone https:\/\/github.com\/datawiz168\/mcp-snowflake-service.git\ncd mcp-snowflake-service<\/code><\/pre><\/div>\n\n\n\n<h5 class=\"wp-block-heading\">2. Snowflake\u63a5\u7d9a\u60c5\u5831\u306e\u6e96\u5099<\/h5>\n\n\n\n<p>\u30b5\u30fc\u30d3\u30b9\u304cSnowflake\u306b\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u8a8d\u8a3c\u60c5\u5831\u304c\u5fc5\u8981\u3067\u3059\u3002\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306f\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u306e\u89b3\u70b9\u304b\u3089\u63a8\u5968\u3055\u308c\u308b\u9375\u30da\u30a2\u8a8d\u8a3c\uff08Key Pair Authentication\uff09\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>\u79d8\u5bc6\u9375\u306e\u751f\u6210<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 des3 -inform PEM -out rsa_key.p8\n# \u30d1\u30b9\u30d5\u30ec\u30fc\u30ba\u3092\u8a2d\u5b9a\u3057\u307e\u3059<\/code><\/pre><\/div>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>\u516c\u958b\u9375\u306e\u751f\u6210<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub<\/code><\/pre><\/div>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong><strong>Snowflake\u30e6\u30fc\u30b6\u30fc\u3078\u306e\u767b\u9332<\/strong><\/strong>\uff1a\u516c\u958b\u9375\u306e\u5185\u5bb9\u3092\u30b3\u30d4\u30fc\u3057\u3001Snowflake\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u5272\u308a\u5f53\u3066\u307e\u3059\u3002<\/li>\n<\/ol>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>ALTER USER &lt;your_user_name&gt; SET RSA_PUBLIC_KEY=&#39;&lt;rsa_key.pub\u306e\u5185\u5bb9\uff08-----BEGIN PUBLIC KEY-----\u3068-----END PUBLIC KEY-----\u306e\u9593\uff09&gt;&#39;;<\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">&#x1f6e0;&#xfe0f; \u30b9\u30c6\u30c3\u30d7 2: \u30b5\u30fc\u30d3\u30b9\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u4f5c\u6210<\/h4>\n\n\n\n<p>\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u306f\u3001\u74b0\u5883\u5909\u6570\u307e\u305f\u306f\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u901a\u3058\u3066Snowflake\u3078\u306e\u63a5\u7d9a\u60c5\u5831\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u3002<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">1. \u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\uff08<code>config.json<\/code>\uff09\u306e\u6e96\u5099<\/h5>\n\n\n\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30eb\u30fc\u30c8\u306b <code>config.json<\/code> \u3092\u4f5c\u6210\u3057\u3001Snowflake\u63a5\u7d9a\u60c5\u5831\u3068\u9375\u30da\u30a2\u8a8d\u8a3c\u306e\u60c5\u5831\u3092\u8a18\u8ff0\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>{\n  &quot;snowflake&quot;: {\n    &quot;account_name&quot;: &quot;&lt;your_snowflake_account_name&gt;&quot;, \n    &quot;user&quot;: &quot;&lt;your_user_name&gt;&quot;,\n    &quot;role&quot;: &quot;&lt;role_to_use&gt;&quot;,\n    &quot;warehouse&quot;: &quot;&lt;warehouse_to_use&gt;&quot;,\n    &quot;database&quot;: &quot;&lt;default_database&gt;&quot;,\n    &quot;schema&quot;: &quot;&lt;default_schema&gt;&quot;,\n    &quot;key_config&quot;: {\n      &quot;private_key_path&quot;: &quot;.\/path\/to\/rsa_key.p8&quot;, \n      &quot;private_key_passphrase&quot;: &quot;&lt;your_passphrase&gt;&quot;\n    }\n  },\n  &quot;server&quot;: {\n    &quot;port&quot;: &quot;8080&quot;\n  }\n}<\/code><\/pre><\/div>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>&#x1f4cc; <strong>\u91cd\u8981:<\/strong> <code>private_key_path<\/code> \u306f\u3001\u30b5\u30fc\u30d3\u30b9\u304c\u5b9f\u884c\u3055\u308c\u308b\u74b0\u5883\u304b\u3089\u306e\u76f8\u5bfe\u30d1\u30b9\u307e\u305f\u306f\u7d76\u5bfe\u30d1\u30b9\u3092\u6b63\u78ba\u306b\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\">&#x2699;&#xfe0f; \u30b9\u30c6\u30c3\u30d7 3: \u30b5\u30fc\u30d3\u30b9\u306e\u30d3\u30eb\u30c9\u3068\u5b9f\u884c<\/h4>\n\n\n\n<p>\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u6e96\u5099\u3067\u304d\u305f\u3089\u3001Go\u8a00\u8a9e\u3067\u30b5\u30fc\u30d3\u30b9\u3092\u30d3\u30eb\u30c9\u3057\u3001\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">1. \u4f9d\u5b58\u95a2\u4fc2\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h5>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>go mod tidy<\/code><\/pre><\/div>\n\n\n\n<h5 class=\"wp-block-heading\">\uff12. \u30b5\u30fc\u30d3\u30b9\u306e\u30d3\u30eb\u30c9<\/h5>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>go build<\/code><\/pre><\/div>\n\n\n\n<h5 class=\"wp-block-heading\">3. \u30b5\u30fc\u30d3\u30b9\u306e\u5b9f\u884c<\/h5>\n\n\n\n<p>\u30d3\u30eb\u30c9\u3055\u308c\u305f\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>.\/mcp-snowflake-service -config=config.json<\/code><\/pre><\/div>\n\n\n\n<p>\u30b5\u30fc\u30d3\u30b9\u304c\u8d77\u52d5\u3059\u308b\u3068\u3001\u6307\u5b9a\u3055\u308c\u305f\u30dd\u30fc\u30c8\uff08\u4f8b: <code>8080<\/code>\uff09\u3067\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u53d7\u3051\u4ed8\u3051\u308b\u72b6\u614b\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">&#x1f50d; \u30b9\u30c6\u30c3\u30d7 4: \u52d5\u4f5c\u78ba\u8a8d\uff08API\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306e\u30c6\u30b9\u30c8\uff09<\/h4>\n\n\n\n<p>\u3053\u306e\u30ab\u30b9\u30bf\u30e0\u30b5\u30fc\u30d3\u30b9\u306f\u3001Snowflake\u3078\u306e\u30af\u30a8\u30ea\u5b9f\u884c\u3092\u62bd\u8c61\u5316\u3057\u305fAPI\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">1. \u30b5\u30f3\u30d7\u30eb\u30af\u30a8\u30ea\u306e\u5b9f\u884c\uff08cURL\u3092\u4f7f\u7528\uff09<\/h5>\n\n\n\n<p>\u30b5\u30fc\u30d3\u30b9\u304c\u63d0\u4f9b\u3059\u308b\u30af\u30a8\u30ea\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306b\u5bfe\u3057\u3066\u3001JSON\u5f62\u5f0f\u3067\u30af\u30a8\u30ea\u3092\u9001\u4fe1\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><strong>\u30ea\u30af\u30a8\u30b9\u30c8\u4f8b:<\/strong><\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>curl -X POST http:\/\/localhost:8080\/query \\\n     -H &quot;Content-Type: application\/json&quot; \\\n     -d &#39;{&quot;sql&quot;: &quot;SELECT COUNT(*) FROM YOUR_DATABASE.YOUR_SCHEMA.YOUR_TABLE;&quot;}&#39;<\/code><\/pre><\/div>\n\n\n\n<p><strong>\u30ec\u30b9\u30dd\u30f3\u30b9:<\/strong><\/p>\n\n\n\n<p>\u30b5\u30fc\u30d3\u30b9\u306f\u3001Snowflake\u304b\u3089\u53d6\u5f97\u3057\u305f\u30af\u30a8\u30ea\u7d50\u679c\u3092JSON\u5f62\u5f0f\u3067\u8fd4\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-plain\"><code>{\n  &quot;data&quot;: [\n    {\n      &quot;COUNT(*)&quot;: 1000\n    }\n  ],\n  &quot;message&quot;: &quot;Query executed successfully&quot;\n}<\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Cursor\u306e<\/h2>\n","protected":false},"excerpt":{"rendered":"<p>\u30ab\u30b9\u30bf\u30e0\u30b5\u30fc\u30d3\u30b9\uff08MCP\uff09\u3092Snowflake\u3068\u9023\u643a\u3055\u305b\u308b\u65b9\u6cd5\uff1amcp-snowflake-service \u306e\u6d3b\u7528 #x1f4a1; \u306f\u3058\u3081\u306b Snowflake\u306f\u5f37\u529b\u306a\u30c7\u30fc\u30bf\u30a6\u30a7\u30a2\u30cf\u30a6\u30b9\u3067\u3059\u304c\u3001\u30ab\u30b9\u30bf\u30e0\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7<\/p>\n","protected":false},"author":1,"featured_media":3198,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jin_ogp_image_url":"","_jin_last_featured_id":0,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-3183","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/posts\/3183","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3183"}],"version-history":[{"count":3,"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/posts\/3183\/revisions"}],"predecessor-version":[{"id":3207,"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/posts\/3183\/revisions\/3207"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=\/wp\/v2\/media\/3198"}],"wp:attachment":[{"href":"https:\/\/agile-software.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3183"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3183"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/agile-software.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3183"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}