<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>MCP Tools Reference | Terry-Form MCP</title>
<meta name="generator" content="Jekyll v3.9.5" />
<meta property="og:title" content="MCP Tools Reference" />
<meta name="author" content="AJ Geddes" />
<meta property="og:locale" content="en_US" />
<meta name="description" content="Complete reference for all Terry-Form MCP tools" />
<meta property="og:description" content="Complete reference for all Terry-Form MCP tools" />
<link rel="canonical" href="http://localhost:4000/terry-form-mcp/api/mcp-tools" />
<meta property="og:url" content="http://localhost:4000/terry-form-mcp/api/mcp-tools" />
<meta property="og:site_name" content="Terry-Form MCP" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2025-10-06T05:22:44-05:00" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="MCP Tools Reference" />
<meta name="twitter:site" content="@terryform" />
<meta name="twitter:creator" content="@AJ Geddes" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"AJ Geddes"},"dateModified":"2025-10-05T16:17:35-05:00","datePublished":"2025-10-06T05:22:44-05:00","description":"Complete reference for all Terry-Form MCP tools","headline":"MCP Tools Reference","mainEntityOfPage":{"@type":"WebPage","@id":"http://localhost:4000/terry-form-mcp/api/mcp-tools"},"publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"http://localhost:4000/terry-form-mcp/assets/images/terry-form-logo.png"},"name":"AJ Geddes"},"url":"http://localhost:4000/terry-form-mcp/api/mcp-tools"}</script>
<!-- End Jekyll SEO tag -->
<link rel="stylesheet" href="/terry-form-mcp/assets/css/style.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css">
<link type="application/atom+xml" rel="alternate" href="http://localhost:4000/terry-form-mcp/feed.xml" title="Terry-Form MCP" />
<!-- Mermaid for diagrams -->
<script src="https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js"></script>
<script>
// Convert code.language-mermaid blocks to div.mermaid for rendering
document.addEventListener('DOMContentLoaded', function() {
document.querySelectorAll('code.language-mermaid').forEach(function(block) {
const pre = block.parentElement;
const div = document.createElement('div');
div.className = 'mermaid';
div.textContent = block.textContent;
pre.parentElement.replaceChild(div, pre);
});
mermaid.initialize({
startOnLoad: true,
theme: window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'default'
});
mermaid.init(undefined, document.querySelectorAll('.mermaid'));
});
</script>
</head>
<body>
<nav class="main-nav">
<div class="nav-container">
<a href="/terry-form-mcp/" class="nav-logo">
<img src="/terry-form-mcp/assets/images/terry-form-logo.png" alt="Terry-Form MCP">
<span>Terry-Form MCP</span>
</a>
<button class="nav-toggle" aria-label="Toggle navigation">
<span></span>
<span></span>
<span></span>
</button>
<div class="nav-menu">
<a href="/terry-form-mcp/"
class="nav-link "
>
Home
</a>
<a href="/terry-form-mcp/getting-started"
class="nav-link "
>
Getting Started
</a>
<a href="/terry-form-mcp/guides/"
class="nav-link "
>
Guides
</a>
<a href="/terry-form-mcp/api/"
class="nav-link "
>
API Reference
</a>
<a href="/terry-form-mcp/architecture/"
class="nav-link "
>
Architecture
</a>
<a href="/terry-form-mcp/tutorials/"
class="nav-link "
>
Tutorials
</a>
<a href="https://github.com/aj-geddes/terry-form-mcp"
class="nav-link "
target="_blank" rel="noopener">
GitHub
<i class="fab fa-github"></i>
</a>
</div>
</div>
</nav>
<main class="main-content">
<article class="api-doc">
<header class="api-header">
<h1>MCP Tools Reference</h1>
<p class="api-description">Complete reference for all Terry-Form MCP tools</p>
</header>
<div class="api-content">
<h1 id="mcp-tools-reference">MCP Tools Reference</h1>
<p>This document provides a complete reference for all tools available through the Terry-Form MCP protocol.</p>
<h2 id="core-terraform-tools">Core Terraform Tools</h2>
<h3 id="terry">terry</h3>
<p>The primary tool for executing Terraform operations.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">TerryParams</span> <span class="p">{</span>
<span class="nl">path</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span> <span class="c1">// Workspace path relative to /mnt/workspace</span>
<span class="nl">actions</span><span class="p">:</span> <span class="kr">string</span><span class="p">[];</span> <span class="c1">// Array of Terraform actions to execute</span>
<span class="nl">vars</span><span class="p">?:</span> <span class="nb">Record</span><span class="o"><</span><span class="kr">string</span><span class="p">,</span> <span class="kr">any</span><span class="o">></span><span class="p">;</span> <span class="c1">// Terraform variables</span>
<span class="p">}</span>
</code></pre></div></div>
<p><strong>Supported Actions:</strong></p>
<ul>
<li><code class="language-plaintext highlighter-rouge">init</code> - Initialize Terraform workspace</li>
<li><code class="language-plaintext highlighter-rouge">validate</code> - Validate configuration syntax</li>
<li><code class="language-plaintext highlighter-rouge">fmt</code> - Format Terraform files</li>
<li><code class="language-plaintext highlighter-rouge">plan</code> - Generate execution plan</li>
<li><code class="language-plaintext highlighter-rouge">show</code> - Show current state</li>
<li><code class="language-plaintext highlighter-rouge">graph</code> - Generate dependency graph</li>
<li><code class="language-plaintext highlighter-rouge">providers</code> - List required providers</li>
<li><code class="language-plaintext highlighter-rouge">version</code> - Show Terraform version</li>
</ul>
<p><strong>Example Usage:</strong></p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"tool"</span><span class="p">:</span><span class="w"> </span><span class="s2">"terry"</span><span class="p">,</span><span class="w">
</span><span class="nl">"arguments"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"environments/production"</span><span class="p">,</span><span class="w">
</span><span class="nl">"actions"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"init"</span><span class="p">,</span><span class="w"> </span><span class="s2">"validate"</span><span class="p">,</span><span class="w"> </span><span class="s2">"plan"</span><span class="p">],</span><span class="w">
</span><span class="nl">"vars"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"environment"</span><span class="p">:</span><span class="w"> </span><span class="s2">"prod"</span><span class="p">,</span><span class="w">
</span><span class="nl">"region"</span><span class="p">:</span><span class="w"> </span><span class="s2">"us-east-1"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<p><strong>Response Format:</strong></p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"terry-results"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"action"</span><span class="p">:</span><span class="w"> </span><span class="s2">"init"</span><span class="p">,</span><span class="w">
</span><span class="nl">"success"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"exit_code"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"stdout"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Terraform has been successfully initialized!"</span><span class="p">,</span><span class="w">
</span><span class="nl">"stderr"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span><span class="w">
</span><span class="nl">"duration"</span><span class="p">:</span><span class="w"> </span><span class="mf">2.34</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"action"</span><span class="p">:</span><span class="w"> </span><span class="s2">"plan"</span><span class="p">,</span><span class="w">
</span><span class="nl">"success"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"exit_code"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"plan_summary"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"add"</span><span class="p">:</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w">
</span><span class="nl">"change"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
</span><span class="nl">"destroy"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"resources"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="err">...</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h3 id="terry_workspace_list">terry_workspace_list</h3>
<p>List all available Terraform workspaces.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">WorkspaceListParams</span> <span class="p">{</span>
<span class="c1">// No parameters required</span>
<span class="p">}</span>
</code></pre></div></div>
<p><strong>Example Response:</strong></p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"workspaces"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"environments/dev"</span><span class="p">,</span><span class="w">
</span><span class="nl">"initialized"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"has_state"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"last_modified"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2024-01-15T10:30:00Z"</span><span class="p">,</span><span class="w">
</span><span class="nl">"providers"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"aws"</span><span class="p">,</span><span class="w"> </span><span class="s2">"kubernetes"</span><span class="p">],</span><span class="w">
</span><span class="nl">"modules"</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h3 id="terry_version">terry_version</h3>
<p>Get Terraform version information.</p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"terraform_version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.6.5"</span><span class="p">,</span><span class="w">
</span><span class="nl">"platform"</span><span class="p">:</span><span class="w"> </span><span class="s2">"linux_amd64"</span><span class="p">,</span><span class="w">
</span><span class="nl">"provider_selections"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"aws"</span><span class="p">:</span><span class="w"> </span><span class="s2">"5.31.0"</span><span class="p">,</span><span class="w">
</span><span class="nl">"kubernetes"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2.24.0"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h2 id="github-integration-tools">GitHub Integration Tools</h2>
<h3 id="github_clone_repo">github_clone_repo</h3>
<p>Clone or update a GitHub repository.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">GitHubCloneParams</span> <span class="p">{</span>
<span class="nl">owner</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span> <span class="c1">// Repository owner/organization</span>
<span class="nl">repo</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span> <span class="c1">// Repository name</span>
<span class="nl">branch</span><span class="p">?:</span> <span class="kr">string</span><span class="p">;</span> <span class="c1">// Branch to clone (optional)</span>
<span class="nl">force</span><span class="p">?:</span> <span class="nx">boolean</span><span class="p">;</span> <span class="c1">// Force update if exists</span>
<span class="p">}</span>
</code></pre></div></div>
<p><strong>Example:</strong></p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"tool"</span><span class="p">:</span><span class="w"> </span><span class="s2">"github_clone_repo"</span><span class="p">,</span><span class="w">
</span><span class="nl">"arguments"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"owner"</span><span class="p">:</span><span class="w"> </span><span class="s2">"myorg"</span><span class="p">,</span><span class="w">
</span><span class="nl">"repo"</span><span class="p">:</span><span class="w"> </span><span class="s2">"infrastructure"</span><span class="p">,</span><span class="w">
</span><span class="nl">"branch"</span><span class="p">:</span><span class="w"> </span><span class="s2">"main"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h3 id="github_list_terraform_files">github_list_terraform_files</h3>
<p>List Terraform files in a GitHub repository.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">GitHubListParams</span> <span class="p">{</span>
<span class="nl">owner</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="nl">repo</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="nl">path</span><span class="p">?:</span> <span class="kr">string</span><span class="p">;</span> <span class="c1">// Subdirectory path</span>
<span class="nl">pattern</span><span class="p">?:</span> <span class="kr">string</span><span class="p">;</span> <span class="c1">// File pattern (default: "*.tf")</span>
<span class="p">}</span>
</code></pre></div></div>
<p><strong>Response:</strong></p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"success"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"repository"</span><span class="p">:</span><span class="w"> </span><span class="s2">"myorg/infrastructure"</span><span class="p">,</span><span class="w">
</span><span class="nl">"files"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"modules/vpc/main.tf"</span><span class="p">,</span><span class="w">
</span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"main.tf"</span><span class="p">,</span><span class="w">
</span><span class="nl">"size"</span><span class="p">:</span><span class="w"> </span><span class="mi">2048</span><span class="p">,</span><span class="w">
</span><span class="nl">"modified"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2024-01-15T10:30:00Z"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">],</span><span class="w">
</span><span class="nl">"count"</span><span class="p">:</span><span class="w"> </span><span class="mi">15</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h3 id="github_get_terraform_config">github_get_terraform_config</h3>
<p>Analyze Terraform configuration in a repository.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">GitHubConfigParams</span> <span class="p">{</span>
<span class="nl">owner</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="nl">repo</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="nl">config_path</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span> <span class="c1">// Path to Terraform config</span>
<span class="p">}</span>
</code></pre></div></div>
<p><strong>Response:</strong></p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"success"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"repository"</span><span class="p">:</span><span class="w"> </span><span class="s2">"myorg/infrastructure"</span><span class="p">,</span><span class="w">
</span><span class="nl">"config_path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"environments/prod"</span><span class="p">,</span><span class="w">
</span><span class="nl">"terraform_files"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"main.tf"</span><span class="p">,</span><span class="w"> </span><span class="s2">"variables.tf"</span><span class="p">,</span><span class="w"> </span><span class="s2">"outputs.tf"</span><span class="p">],</span><span class="w">
</span><span class="nl">"has_backend"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"has_variables"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"has_outputs"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"providers"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"aws"</span><span class="p">,</span><span class="w"> </span><span class="s2">"kubernetes"</span><span class="p">],</span><span class="w">
</span><span class="nl">"modules"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"vpc"</span><span class="p">,</span><span class="w"> </span><span class="s2">"eks"</span><span class="p">,</span><span class="w"> </span><span class="s2">"rds"</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h3 id="github_prepare_workspace">github_prepare_workspace</h3>
<p>Prepare a Terraform workspace from a GitHub repository.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">GitHubPrepareParams</span> <span class="p">{</span>
<span class="nl">owner</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="nl">repo</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="nl">config_path</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="nl">workspace_name</span><span class="p">?:</span> <span class="kr">string</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<h2 id="terraform-cloud-tools">Terraform Cloud Tools</h2>
<h3 id="tf_cloud_list_workspaces">tf_cloud_list_workspaces</h3>
<p>List Terraform Cloud workspaces.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">TFCloudListParams</span> <span class="p">{</span>
<span class="nl">organization</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="nl">limit</span><span class="p">?:</span> <span class="kr">number</span><span class="p">;</span> <span class="c1">// Max results (default: 20)</span>
<span class="p">}</span>
</code></pre></div></div>
<p><strong>Response:</strong></p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"workspaces"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ws-abc123"</span><span class="p">,</span><span class="w">
</span><span class="nl">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"production-vpc"</span><span class="p">,</span><span class="w">
</span><span class="nl">"environment"</span><span class="p">:</span><span class="w"> </span><span class="s2">"production"</span><span class="p">,</span><span class="w">
</span><span class="nl">"terraform_version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.6.5"</span><span class="p">,</span><span class="w">
</span><span class="nl">"current_run"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"run-xyz789"</span><span class="p">,</span><span class="w">
</span><span class="nl">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"applied"</span><span class="p">,</span><span class="w">
</span><span class="nl">"created_at"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2024-01-15T10:30:00Z"</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"resource_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">42</span><span class="p">,</span><span class="w">
</span><span class="nl">"auto_apply"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h3 id="tf_cloud_get_workspace">tf_cloud_get_workspace</h3>
<p>Get detailed workspace information.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">TFCloudGetParams</span> <span class="p">{</span>
<span class="nl">organization</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="nl">workspace</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<h3 id="tf_cloud_list_runs">tf_cloud_list_runs</h3>
<p>List runs for a workspace.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">TFCloudRunsParams</span> <span class="p">{</span>
<span class="nl">organization</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="nl">workspace</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="nl">limit</span><span class="p">?:</span> <span class="kr">number</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<h3 id="tf_cloud_get_state_outputs">tf_cloud_get_state_outputs</h3>
<p>Get state outputs from a workspace.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">TFCloudOutputsParams</span> <span class="p">{</span>
<span class="nl">organization</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="nl">workspace</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<p><strong>Response:</strong></p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"outputs"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"vpc_id"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"vpc-12345678"</span><span class="p">,</span><span class="w">
</span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"string"</span><span class="p">,</span><span class="w">
</span><span class="nl">"sensitive"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"database_endpoint"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"[SENSITIVE]"</span><span class="p">,</span><span class="w">
</span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"string"</span><span class="p">,</span><span class="w">
</span><span class="nl">"sensitive"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h2 id="intelligence-tools">Intelligence Tools</h2>
<h3 id="terry_analyze">terry_analyze</h3>
<p>Analyze Terraform configuration for best practices.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">AnalyzeParams</span> <span class="p">{</span>
<span class="nl">path</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<p><strong>Response:</strong></p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"analysis"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"score"</span><span class="p">:</span><span class="w"> </span><span class="mi">85</span><span class="p">,</span><span class="w">
</span><span class="nl">"issues"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"severity"</span><span class="p">:</span><span class="w"> </span><span class="s2">"warning"</span><span class="p">,</span><span class="w">
</span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"security"</span><span class="p">,</span><span class="w">
</span><span class="nl">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"S3 bucket lacks encryption configuration"</span><span class="p">,</span><span class="w">
</span><span class="nl">"file"</span><span class="p">:</span><span class="w"> </span><span class="s2">"s3.tf"</span><span class="p">,</span><span class="w">
</span><span class="nl">"line"</span><span class="p">:</span><span class="w"> </span><span class="mi">15</span><span class="p">,</span><span class="w">
</span><span class="nl">"recommendation"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Add server_side_encryption_configuration block"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">],</span><span class="w">
</span><span class="nl">"statistics"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"resources"</span><span class="p">:</span><span class="w"> </span><span class="mi">25</span><span class="p">,</span><span class="w">
</span><span class="nl">"data_sources"</span><span class="p">:</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w">
</span><span class="nl">"modules"</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w">
</span><span class="nl">"providers"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h3 id="terry_security_scan">terry_security_scan</h3>
<p>Run security scan on Terraform configuration.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">SecurityScanParams</span> <span class="p">{</span>
<span class="nl">path</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="nl">severity</span><span class="p">?:</span> <span class="dl">"</span><span class="s2">low</span><span class="dl">"</span> <span class="o">|</span> <span class="dl">"</span><span class="s2">medium</span><span class="dl">"</span> <span class="o">|</span> <span class="dl">"</span><span class="s2">high</span><span class="dl">"</span> <span class="o">|</span> <span class="dl">"</span><span class="s2">critical</span><span class="dl">"</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<p><strong>Response:</strong></p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"security_scan"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"vulnerabilities"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"CKV_AWS_20"</span><span class="p">,</span><span class="w">
</span><span class="nl">"severity"</span><span class="p">:</span><span class="w"> </span><span class="s2">"high"</span><span class="p">,</span><span class="w">
</span><span class="nl">"resource"</span><span class="p">:</span><span class="w"> </span><span class="s2">"aws_s3_bucket.data"</span><span class="p">,</span><span class="w">
</span><span class="nl">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"S3 Bucket has an ACL defined which allows public access"</span><span class="p">,</span><span class="w">
</span><span class="nl">"remediation"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Set bucket ACL to 'private'"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">],</span><span class="w">
</span><span class="nl">"summary"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"critical"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"high"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
</span><span class="nl">"medium"</span><span class="p">:</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w">
</span><span class="nl">"low"</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h3 id="terry_recommendations">terry_recommendations</h3>
<p>Get recommendations for Terraform configuration.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">RecommendationsParams</span> <span class="p">{</span>
<span class="nl">path</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="nl">focus</span><span class="p">?:</span> <span class="dl">"</span><span class="s2">cost</span><span class="dl">"</span> <span class="o">|</span> <span class="dl">"</span><span class="s2">security</span><span class="dl">"</span> <span class="o">|</span> <span class="dl">"</span><span class="s2">performance</span><span class="dl">"</span> <span class="o">|</span> <span class="dl">"</span><span class="s2">reliability</span><span class="dl">"</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<h2 id="lsp-tools">LSP Tools</h2>
<h3 id="terraform_validate_lsp">terraform_validate_lsp</h3>
<p>Validate Terraform file using Language Server Protocol.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">ValidateLSPParams</span> <span class="p">{</span>
<span class="nl">file_path</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="nl">workspace_path</span><span class="p">?:</span> <span class="kr">string</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<p><strong>Response:</strong></p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"terraform-ls-validation"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"file_path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"main.tf"</span><span class="p">,</span><span class="w">
</span><span class="nl">"diagnostics"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"range"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"start"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="nl">"line"</span><span class="p">:</span><span class="w"> </span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="nl">"character"</span><span class="p">:</span><span class="w"> </span><span class="mi">5</span><span class="p">},</span><span class="w">
</span><span class="nl">"end"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="nl">"line"</span><span class="p">:</span><span class="w"> </span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="nl">"character"</span><span class="p">:</span><span class="w"> </span><span class="mi">15</span><span class="p">}</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"severity"</span><span class="p">:</span><span class="w"> </span><span class="s2">"error"</span><span class="p">,</span><span class="w">
</span><span class="nl">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Unknown resource type 'aws_s3_buckt'"</span><span class="p">,</span><span class="w">
</span><span class="nl">"code"</span><span class="p">:</span><span class="w"> </span><span class="s2">"invalid_resource_type"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">],</span><span class="w">
</span><span class="nl">"valid"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h3 id="terraform_hover">terraform_hover</h3>
<p>Get hover information for a position in a Terraform file.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">HoverParams</span> <span class="p">{</span>
<span class="nl">file_path</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="nl">line</span><span class="p">:</span> <span class="kr">number</span><span class="p">;</span> <span class="c1">// 0-based</span>
<span class="nl">character</span><span class="p">:</span> <span class="kr">number</span><span class="p">;</span> <span class="c1">// 0-based</span>
<span class="nl">workspace_path</span><span class="p">?:</span> <span class="kr">string</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<h3 id="terraform_complete">terraform_complete</h3>
<p>Get code completion suggestions.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">CompleteParams</span> <span class="p">{</span>
<span class="nl">file_path</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="nl">line</span><span class="p">:</span> <span class="kr">number</span><span class="p">;</span>
<span class="nl">character</span><span class="p">:</span> <span class="kr">number</span><span class="p">;</span>
<span class="nl">workspace_path</span><span class="p">?:</span> <span class="kr">string</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<p><strong>Response:</strong></p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"terraform-completions"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"completions"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"label"</span><span class="p">:</span><span class="w"> </span><span class="s2">"instance_type"</span><span class="p">,</span><span class="w">
</span><span class="nl">"kind"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Property"</span><span class="p">,</span><span class="w">
</span><span class="nl">"detail"</span><span class="p">:</span><span class="w"> </span><span class="s2">"string"</span><span class="p">,</span><span class="w">
</span><span class="nl">"documentation"</span><span class="p">:</span><span class="w"> </span><span class="s2">"The instance type to use for the instance"</span><span class="p">,</span><span class="w">
</span><span class="nl">"insertText"</span><span class="p">:</span><span class="w"> </span><span class="s2">"instance_type = </span><span class="se">\"</span><span class="s2">${1:t3.micro}</span><span class="se">\"</span><span class="s2">"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h3 id="terraform_format_lsp">terraform_format_lsp</h3>
<p>Format a Terraform document.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">FormatLSPParams</span> <span class="p">{</span>
<span class="nl">file_path</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="nl">workspace_path</span><span class="p">?:</span> <span class="kr">string</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<h2 id="utility-tools">Utility Tools</h2>
<h3 id="terry_environment_check">terry_environment_check</h3>
<p>Check Terry-Form environment and dependencies.</p>
<p><strong>Response:</strong></p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"terry-environment"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"environment"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"working_directory"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/app"</span><span class="p">,</span><span class="w">
</span><span class="nl">"user"</span><span class="p">:</span><span class="w"> </span><span class="s2">"terraform"</span><span class="p">,</span><span class="w">
</span><span class="nl">"workspace_mount"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"terraform"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"available"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/usr/local/bin/terraform"</span><span class="p">,</span><span class="w">
</span><span class="nl">"version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Terraform v1.6.5"</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"terraform_ls"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"available"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"v0.32.3"</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"container"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"is_docker"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"hostname"</span><span class="p">:</span><span class="w"> </span><span class="s2">"terry-form-abc123"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h3 id="terry_workspace_setup">terry_workspace_setup</h3>
<p>Create a properly structured Terraform workspace.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">WorkspaceSetupParams</span> <span class="p">{</span>
<span class="nl">path</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="nl">project_name</span><span class="p">?:</span> <span class="kr">string</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<p><strong>Response:</strong></p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"terry-workspace-setup"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"success"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"workspace_path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/mnt/workspace/my-project"</span><span class="p">,</span><span class="w">
</span><span class="nl">"created_files"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"main.tf"</span><span class="p">,</span><span class="w"> </span><span class="s2">"variables.tf"</span><span class="p">,</span><span class="w"> </span><span class="s2">"outputs.tf"</span><span class="p">],</span><span class="w">
</span><span class="nl">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Workspace setup complete. Created 3 files."</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h3 id="terry_workspace_info">terry_workspace_info</h3>
<p>Get information about a Terraform workspace.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">WorkspaceInfoParams</span> <span class="p">{</span>
<span class="nl">path</span><span class="p">?:</span> <span class="kr">string</span><span class="p">;</span> <span class="c1">// Defaults to "."</span>
<span class="p">}</span>
</code></pre></div></div>
<p><strong>Response:</strong></p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"terry-workspace"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"path_info"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"requested_path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"project1"</span><span class="p">,</span><span class="w">
</span><span class="nl">"full_path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/mnt/workspace/project1"</span><span class="p">,</span><span class="w">
</span><span class="nl">"exists"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"is_directory"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"terraform_files"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"main.tf"</span><span class="p">,</span><span class="w"> </span><span class="s2">"variables.tf"</span><span class="p">,</span><span class="w"> </span><span class="s2">"outputs.tf"</span><span class="p">],</span><span class="w">
</span><span class="nl">"terraform_state"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"initialized"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"state_file_exists"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span><span class="p">},</span><span class="w">
</span><span class="nl">"common_files"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"main.tf"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"variables.tf"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"outputs.tf"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h3 id="terry_file_check">terry_file_check</h3>
<p>Validate Terraform file syntax and structure.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">FileCheckParams</span> <span class="p">{</span>
<span class="nl">file_path</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<p><strong>Response:</strong></p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"terry-file-check"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"file_path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"main.tf"</span><span class="p">,</span><span class="w">
</span><span class="nl">"exists"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"readable"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"size_bytes"</span><span class="p">:</span><span class="w"> </span><span class="mi">2048</span><span class="p">,</span><span class="w">
</span><span class="nl">"syntax_valid"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h3 id="terry_lsp_init">terry_lsp_init</h3>
<p>Manually initialize the LSP client for a workspace.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">LSPInitParams</span> <span class="p">{</span>
<span class="nl">workspace_path</span><span class="p">:</span> <span class="kr">string</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>
<p><strong>Response:</strong></p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"terry-lsp-init"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"success"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"workspace_path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/mnt/workspace/project"</span><span class="p">,</span><span class="w">
</span><span class="nl">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LSP client initialized successfully"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h3 id="terry_lsp_debug">terry_lsp_debug</h3>
<p>Get detailed LSP debugging information.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">LSPDebugParams</span> <span class="p">{</span>
<span class="c1">// No parameters required</span>
<span class="p">}</span>
</code></pre></div></div>
<p><strong>Response:</strong></p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"terry-lsp-debug"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"lsp_status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"initialized"</span><span class="p">,</span><span class="w">
</span><span class="nl">"workspace_path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/mnt/workspace/project"</span><span class="p">,</span><span class="w">
</span><span class="nl">"capabilities"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"completion"</span><span class="p">,</span><span class="w"> </span><span class="s2">"hover"</span><span class="p">,</span><span class="w"> </span><span class="s2">"validation"</span><span class="p">],</span><span class="w">
</span><span class="nl">"diagnostics_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h3 id="terraform_lsp_status">terraform_lsp_status</h3>
<p>Get the current status of the Terraform Language Server.</p>
<div class="language-typescript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kr">interface</span> <span class="nx">LSPStatusParams</span> <span class="p">{</span>
<span class="c1">// No parameters required</span>
<span class="p">}</span>
</code></pre></div></div>
<p><strong>Response:</strong></p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"terraform-lsp-status"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"initialized"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
</span><span class="nl">"server_version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.33.2"</span><span class="p">,</span><span class="w">
</span><span class="nl">"active_workspace"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/mnt/workspace/project"</span><span class="p">,</span><span class="w">
</span><span class="nl">"capabilities_supported"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"completion"</span><span class="p">,</span><span class="w"> </span><span class="s2">"hover"</span><span class="p">,</span><span class="w"> </span><span class="s2">"validation"</span><span class="p">,</span><span class="w"> </span><span class="s2">"formatting"</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h2 id="error-handling">Error Handling</h2>
<p>All tools follow a consistent error response format:</p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"error"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Error message"</span><span class="p">,</span><span class="w">
</span><span class="nl">"code"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ERROR_CODE"</span><span class="p">,</span><span class="w">
</span><span class="nl">"details"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"field"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Additional error context"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<p><strong>Common Error Codes:</strong></p>
<ul>
<li><code class="language-plaintext highlighter-rouge">VALIDATION_ERROR</code> - Invalid input parameters</li>
<li><code class="language-plaintext highlighter-rouge">PATH_TRAVERSAL</code> - Attempted access outside workspace</li>
<li><code class="language-plaintext highlighter-rouge">ACTION_BLOCKED</code> - Attempted blocked action</li>
<li><code class="language-plaintext highlighter-rouge">TERRAFORM_ERROR</code> - Terraform execution error</li>
<li><code class="language-plaintext highlighter-rouge">GITHUB_AUTH_ERROR</code> - GitHub authentication failed</li>
<li><code class="language-plaintext highlighter-rouge">WORKSPACE_NOT_FOUND</code> - Workspace doesn’t exist</li>
</ul>
<h2 id="rate-limiting">Rate Limiting</h2>
<p>The MCP server implements rate limiting:</p>
<ul>
<li><strong>Default</strong>: 100 requests per minute</li>
<li><strong>Terraform operations</strong>: 20 per minute</li>
<li><strong>GitHub operations</strong>: 30 per minute</li>
</ul>
<p>Rate limit headers are included in responses:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1705323600
</code></pre></div></div>
<h2 id="best-practices">Best Practices</h2>
<ol>
<li><strong>Always validate before plan</strong>: Run <code class="language-plaintext highlighter-rouge">validate</code> action before <code class="language-plaintext highlighter-rouge">plan</code></li>
<li><strong>Use variables</strong>: Pass sensitive values through <code class="language-plaintext highlighter-rouge">vars</code> parameter</li>
<li><strong>Check workspace</strong>: Use <code class="language-plaintext highlighter-rouge">terry_workspace_list</code> to verify workspace exists</li>
<li><strong>Handle errors</strong>: Check <code class="language-plaintext highlighter-rouge">success</code> field in responses</li>
<li><strong>Use transactions</strong>: Group related actions in single <code class="language-plaintext highlighter-rouge">terry</code> call</li>
</ol>
<h2 id="examples">Examples</h2>
<h3 id="complete-terraform-workflow">Complete Terraform Workflow</h3>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"tool"</span><span class="p">:</span><span class="w"> </span><span class="s2">"terry"</span><span class="p">,</span><span class="w">
</span><span class="nl">"arguments"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"production"</span><span class="p">,</span><span class="w">
</span><span class="nl">"actions"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"init"</span><span class="p">,</span><span class="w"> </span><span class="s2">"validate"</span><span class="p">,</span><span class="w"> </span><span class="s2">"fmt"</span><span class="p">,</span><span class="w"> </span><span class="s2">"plan"</span><span class="p">],</span><span class="w">
</span><span class="nl">"vars"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"environment"</span><span class="p">:</span><span class="w"> </span><span class="s2">"prod"</span><span class="p">,</span><span class="w">
</span><span class="nl">"region"</span><span class="p">:</span><span class="w"> </span><span class="s2">"us-east-1"</span><span class="p">,</span><span class="w">
</span><span class="nl">"instance_count"</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h3 id="github-to-workspace-pipeline">GitHub to Workspace Pipeline</h3>
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// 1. Clone repository</span>
<span class="k">await</span> <span class="nx">mcp</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="dl">"</span><span class="s2">github_clone_repo</span><span class="dl">"</span><span class="p">,</span> <span class="p">{</span>
<span class="na">owner</span><span class="p">:</span> <span class="dl">"</span><span class="s2">myorg</span><span class="dl">"</span><span class="p">,</span>
<span class="na">repo</span><span class="p">:</span> <span class="dl">"</span><span class="s2">infrastructure</span><span class="dl">"</span>
<span class="p">});</span>
<span class="c1">// 2. Prepare workspace</span>
<span class="k">await</span> <span class="nx">mcp</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="dl">"</span><span class="s2">github_prepare_workspace</span><span class="dl">"</span><span class="p">,</span> <span class="p">{</span>
<span class="na">owner</span><span class="p">:</span> <span class="dl">"</span><span class="s2">myorg</span><span class="dl">"</span><span class="p">,</span>
<span class="na">repo</span><span class="p">:</span> <span class="dl">"</span><span class="s2">infrastructure</span><span class="dl">"</span><span class="p">,</span>
<span class="na">config_path</span><span class="p">:</span> <span class="dl">"</span><span class="s2">environments/staging</span><span class="dl">"</span>
<span class="p">});</span>
<span class="c1">// 3. Run Terraform</span>
<span class="k">await</span> <span class="nx">mcp</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="dl">"</span><span class="s2">terry</span><span class="dl">"</span><span class="p">,</span> <span class="p">{</span>
<span class="na">path</span><span class="p">:</span> <span class="dl">"</span><span class="s2">terraform-workspaces/myorg_infrastructure_environments_staging</span><span class="dl">"</span><span class="p">,</span>
<span class="na">actions</span><span class="p">:</span> <span class="p">[</span><span class="dl">"</span><span class="s2">init</span><span class="dl">"</span><span class="p">,</span> <span class="dl">"</span><span class="s2">plan</span><span class="dl">"</span><span class="p">]</span>
<span class="p">});</span>
</code></pre></div></div>
<h3 id="security-validation-pipeline">Security Validation Pipeline</h3>
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// 1. Analyze configuration</span>
<span class="kd">const</span> <span class="nx">analysis</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">mcp</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="dl">"</span><span class="s2">terry_analyze</span><span class="dl">"</span><span class="p">,</span> <span class="p">{</span>
<span class="na">path</span><span class="p">:</span> <span class="dl">"</span><span class="s2">production</span><span class="dl">"</span>
<span class="p">});</span>
<span class="c1">// 2. Run security scan</span>
<span class="kd">const</span> <span class="nx">security</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">mcp</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="dl">"</span><span class="s2">terry_security_scan</span><span class="dl">"</span><span class="p">,</span> <span class="p">{</span>
<span class="na">path</span><span class="p">:</span> <span class="dl">"</span><span class="s2">production</span><span class="dl">"</span><span class="p">,</span>
<span class="na">severity</span><span class="p">:</span> <span class="dl">"</span><span class="s2">medium</span><span class="dl">"</span>
<span class="p">});</span>
<span class="c1">// 3. Get recommendations</span>
<span class="kd">const</span> <span class="nx">recommendations</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">mcp</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="dl">"</span><span class="s2">terry_recommendations</span><span class="dl">"</span><span class="p">,</span> <span class="p">{</span>
<span class="na">path</span><span class="p">:</span> <span class="dl">"</span><span class="s2">production</span><span class="dl">"</span><span class="p">,</span>
<span class="na">focus</span><span class="p">:</span> <span class="dl">"</span><span class="s2">security</span><span class="dl">"</span>
<span class="p">});</span>
<span class="c1">// 4. If all pass, proceed with plan</span>
<span class="k">if</span> <span class="p">(</span><span class="nx">analysis</span><span class="p">.</span><span class="nx">analysis</span><span class="p">.</span><span class="nx">score</span> <span class="o">></span> <span class="mi">80</span> <span class="o">&&</span> <span class="nx">security</span><span class="p">.</span><span class="nx">security_scan</span><span class="p">.</span><span class="nx">summary</span><span class="p">.</span><span class="nx">high</span> <span class="o">===</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="k">await</span> <span class="nx">mcp</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="dl">"</span><span class="s2">terry</span><span class="dl">"</span><span class="p">,</span> <span class="p">{</span>
<span class="na">path</span><span class="p">:</span> <span class="dl">"</span><span class="s2">production</span><span class="dl">"</span><span class="p">,</span>
<span class="na">actions</span><span class="p">:</span> <span class="p">[</span><span class="dl">"</span><span class="s2">plan</span><span class="dl">"</span><span class="p">]</span>
<span class="p">});</span>
<span class="p">}</span>
</code></pre></div></div>
</div>
</article>
</main>
<footer class="site-footer">
<div class="footer-container">
<div class="footer-section">
<h4>Terry-Form MCP</h4>
<p>Enterprise-grade Terraform automation through Model Context Protocol</p>
<div class="social-links">
<a href="https://github.com/aj-geddes/terry-form-mcp" aria-label="GitHub">
<i class="fab fa-github"></i>
</a>
<a href="https://twitter.com/terryform" aria-label="Twitter">
<i class="fab fa-twitter"></i>
</a>
</div>
</div>
<div class="footer-section">
<h4>Documentation</h4>
<ul>
<li><a href="/terry-form-mcp/getting-started">Getting Started</a></li>
<li><a href="/terry-form-mcp/guides/">Guides</a></li>
<li><a href="/terry-form-mcp/api/">API Reference</a></li>
<li><a href="/terry-form-mcp/tutorials/">Tutorials</a></li>
</ul>
</div>
<div class="footer-section">
<h4>Community</h4>
<ul>
<li><a href="https://github.com/aj-geddes/terry-form-mcp/discussions">Discussions</a></li>
<li><a href="https://github.com/aj-geddes/terry-form-mcp/issues">Issues</a></li>
</ul>
</div>
<div class="footer-section">
<h4>Resources</h4>
<ul>
<li><a href="/terry-form-mcp/architecture/">Architecture</a></li>
<li><a href="/terry-form-mcp/guides/security">Security</a></li>
</ul>
</div>
</div>
<div class="footer-bottom">
<p>© 2025 Terry-Form MCP. Built with ❤️ by <a href="https://github.com/aj-geddes">AJ Geddes</a></p>
</div>
</footer>
<script src="/terry-form-mcp/assets/js/main.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-bash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-json.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-yaml.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-python.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-hcl.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/plugins/normalize-whitespace/prism-normalize-whitespace.min.js"></script>
</body>
</html>