feat: WhatsApp + LinkedIn integrations, SquareMCP rebrand, opencode docs

WhatsApp Business API (Meta Cloud API)
- New client: src/clients/whatsapp.ts
- Tools: whatsapp_send_message, whatsapp_send_template, whatsapp_list_templates
- REST endpoints: POST /api/whatsapp/send, POST /api/whatsapp/template, GET /api/whatsapp/templates
- Multi-account env var pattern: WHATSAPP_{ACCOUNT}_*

LinkedIn API (OpenID Connect)
- New client: src/clients/linkedin.ts
- Tools: linkedin_get_profile, linkedin_create_post, linkedin_search_connections, linkedin_send_message
- REST endpoints: GET /api/linkedin/profile, POST /api/linkedin/post, POST /api/linkedin/search-connections, POST /api/linkedin/message
- Multi-account env var pattern: LINKEDIN_{ACCOUNT}_*
- Uses /v2/userinfo (OpenID Connect) for profile reads

Domain migration
- hermes.fetcherpay.com -> hermes.squaremcp.com
- Updated K8s ingress, TLS cert, SERVER_URL env var
- Updated OPENCODE.md and opencode.json references

SquareMCP site
- Added logo assets (SVG, LinkedIn variants)
- Added terms.html
- Updated Dockerfile, nginx config, styles, index, privacy pages

Docs
- Added OPENCODE.md for opencode AI integration setup
- Updated .env.example with WhatsApp and LinkedIn credentials
- Added opencode.json to .gitignore (contains live API key)

Total tools: 19 (email 6, obsidian 5, whatsapp 4, linkedin 4)
This commit is contained in:
Garfield
2026-05-05 01:25:26 -04:00
parent e3a272c332
commit 73f83c0d86
18 changed files with 1207 additions and 45 deletions

View File

@@ -4,6 +4,8 @@ COPY product/site/nginx-site.conf /etc/nginx/conf.d/default.conf
COPY product/site/index.html /usr/share/nginx/html/index.html
COPY product/site/styles.css /usr/share/nginx/html/styles.css
COPY product/site/script.js /usr/share/nginx/html/script.js
COPY product/site/squaremcp-logo.svg /usr/share/nginx/html/squaremcp-logo.svg
COPY product/site/squaremcp_launch.gif /usr/share/nginx/html/squaremcp_launch.gif
COPY product/site/squaremcp_launch_poster.png /usr/share/nginx/html/squaremcp_launch_poster.png
COPY product/site/privacy.html /usr/share/nginx/html/privacy.html
COPY product/site/terms.html /usr/share/nginx/html/terms.html

View File

@@ -8,13 +8,13 @@
name="description"
content="SquareMCP is a managed MCP gateway for internal tools with authentication, permissions, audit logs, and observability."
/>
<link rel="stylesheet" href="./styles.css?v=20260424b" />
<link rel="stylesheet" href="./styles.css?v=20260505b" />
</head>
<body>
<nav class="topbar">
<div class="wrap topbar-row">
<a class="brand" href="/">
<span class="brand-mark">S</span>
<img class="brand-logo" src="./squaremcp-logo.svg" alt="" />
<span class="brand-text">SquareMCP</span>
</a>
<div class="topbar-actions">
@@ -294,6 +294,8 @@
<div class="footer-links">
<a class="footer-link" href="mailto:info@squaremcp.com">info@squaremcp.com</a>
<a class="footer-link" href="https://squaremcp.com">squaremcp.com</a>
<a class="footer-link" href="/privacy">Privacy</a>
<a class="footer-link" href="/terms">Terms</a>
</div>
</div>
</footer>

View File

@@ -6,7 +6,7 @@ server {
index index.html;
location / {
try_files $uri $uri/ /index.html;
try_files $uri $uri.html $uri/ /index.html;
}
location = /index.html {

View File

@@ -1,41 +1,136 @@
<!DOCTYPE html>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Privacy Policy — SquareMCP</title>
<style>
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; max-width: 680px; margin: 60px auto; padding: 0 24px; color: #111; line-height: 1.7; }
h1 { font-size: 1.6rem; margin-bottom: 0.25rem; }
.sub { color: #666; font-size: 0.9rem; margin-bottom: 2rem; }
h2 { font-size: 1.05rem; margin-top: 2rem; }
a { color: #111; }
nav { margin-bottom: 2rem; font-size: 0.9rem; }
nav a { text-decoration: none; color: #666; }
nav a:hover { color: #111; }
</style>
</head>
<body>
<nav><a href="/">← squaremcp.com</a></nav>
<h1>Privacy Policy</h1>
<p class="sub">SquareMCP &mdash; Last updated April 28, 2026</p>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Privacy Policy — SquareMCP</title>
<meta
name="description"
content="SquareMCP privacy policy covering pilot requests, service data, and how customer environments are handled."
/>
<link rel="stylesheet" href="./styles.css?v=20260505b" />
</head>
<body class="legal-shell">
<nav class="topbar">
<div class="wrap topbar-row">
<a class="brand" href="/">
<img class="brand-logo" src="./squaremcp-logo.svg" alt="" />
<span class="brand-text">SquareMCP</span>
</a>
<div class="topbar-actions">
<a class="topbar-link" href="/terms">Terms</a>
<a class="button secondary" href="mailto:info@squaremcp.com">Contact</a>
</div>
</div>
</nav>
<h2>What SquareMCP is</h2>
<p>SquareMCP is a personal MCP server platform that connects AI assistants to your own tools — email, notes, and internal systems. It is operated by Garfield Heron and is currently in private pilot.</p>
<main class="legal-main">
<article class="legal-card">
<div class="legal-eyebrow">Legal</div>
<h1 class="legal-title">Privacy Policy</h1>
<p class="legal-subhead">Last updated May 5, 2026</p>
<h2>Data we collect</h2>
<p>We collect only what is necessary to operate the service: your name, email address, company, and use case when you submit a pilot request. This information is stored securely and used only to evaluate and onboard pilot participants.</p>
<section class="legal-section">
<h2>Scope</h2>
<p>
This Privacy Policy describes how SquareMCP collects, uses, and protects information
when you visit squaremcp.com, contact us, or participate in a SquareMCP pilot or
managed deployment.
</p>
</section>
<h2>Data we do not collect</h2>
<p>SquareMCP does not use analytics, advertising trackers, or third-party data sharing of any kind. We do not sell or rent your information.</p>
<section class="legal-section">
<h2>Information we collect</h2>
<p>We may collect:</p>
<ul>
<li>contact details such as your name, work email, company, and role</li>
<li>pilot intake details such as your use case, target systems, and security requirements</li>
<li>service and operational data needed to provision, secure, and support a deployment</li>
<li>communications you send to us by email or through the pilot intake form</li>
</ul>
</section>
<h2>Your data and your tools</h2>
<p>When you use SquareMCP to connect your own accounts (email, notes, calendars), those connections are authenticated via OAuth and run entirely within your own environment. Your data does not pass through SquareMCP infrastructure — the MCP server runs on your own host or a host you control.</p>
<section class="legal-section">
<h2>How we use information</h2>
<p>We use information to:</p>
<ul>
<li>review and respond to pilot requests</li>
<li>configure and operate SquareMCP deployments</li>
<li>authenticate access, troubleshoot issues, and maintain security controls</li>
<li>communicate about pilots, support, billing, and service changes</li>
</ul>
</section>
<h2>OAuth tokens</h2>
<p>OAuth access tokens used to authenticate AI sessions are stored in a private database on your server. They expire after 24 hours and are never shared with third parties.</p>
<section class="legal-section">
<h2>Customer data and connected systems</h2>
<p>
SquareMCP is designed to act as a managed MCP gateway for internal tools. Depending on
the deployment, customer data may remain in a customer-controlled environment or may be
processed in SquareMCP-managed infrastructure as part of the service. The exact data
path depends on the deployment architecture and connector configuration.
</p>
<p>
Pilot and production customers are responsible for evaluating which systems they choose
to connect and which tool permissions they enable for their users and agents.
</p>
</section>
<h2>Contact</h2>
<p>Questions or requests: <a href="mailto:garfield@fetcherpay.com">garfield@fetcherpay.com</a></p>
</body>
<section class="legal-section">
<h2>Authentication credentials and tokens</h2>
<p>
SquareMCP may process API keys, OAuth credentials, session metadata, audit records, and
related access-control data needed to operate the service. We use these credentials only
to authenticate approved integrations and support the configured deployment.
</p>
</section>
<section class="legal-section">
<h2>Sharing</h2>
<p>
We do not sell personal information. We may share information with infrastructure,
hosting, email, or support providers only to the extent reasonably necessary to run the
service, support customers, comply with law, or protect SquareMCP and its users.
</p>
</section>
<section class="legal-section">
<h2>Retention</h2>
<p>
We retain information for as long as reasonably necessary to evaluate pilots, deliver
services, maintain records, and meet legal, operational, or security obligations.
</p>
</section>
<section class="legal-section">
<h2>Security</h2>
<p>
We use reasonable administrative, technical, and operational measures to protect
information. No system can guarantee absolute security, and you should not submit
information through the service unless you are comfortable with that risk profile.
</p>
</section>
<section class="legal-section">
<h2>Your choices</h2>
<p>
You may contact us to request access, correction, or deletion of personal information we
hold about you, subject to legal and operational limits.
</p>
</section>
<section class="legal-section">
<h2>Contact</h2>
<p>
Questions about this Privacy Policy can be sent to
<a class="footer-link" href="mailto:info@squaremcp.com">info@squaremcp.com</a>.
</p>
</section>
<div class="legal-note">
This page is a general website and pilot-stage privacy policy. It should be reviewed and
adapted if SquareMCP moves into broader commercial availability or regulated deployments.
</div>
</article>
</main>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

View File

@@ -0,0 +1,18 @@
<svg width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg">
<title>SquareMCP logo</title>
<defs>
<linearGradient id="squaremcp-logo-gradient" x1="10" y1="10" x2="54" y2="54" gradientUnits="userSpaceOnUse">
<stop stop-color="#7DB6FF"/>
<stop offset="1" stop-color="#0E63F6"/>
</linearGradient>
</defs>
<path
d="M10 12C10 10.8954 10.8954 10 12 10H31V17H17V31H10V12ZM33 10H52C53.1046 10 54 10.8954 54 12V31H47V17H33V10ZM10 33H17V47H31V54H12C10.8954 54 10 53.1046 10 52V33ZM47 33H54V52C54 53.1046 53.1046 54 52 54H33V47H47V33Z"
fill="url(#squaremcp-logo-gradient)"
/>
<path
d="M24 24H33V31H40V40H31V33H24V24Z"
fill="#0E63F6"
opacity="0.92"
/>
</svg>

After

Width:  |  Height:  |  Size: 736 B

View File

@@ -58,15 +58,11 @@ a {
font-weight: 800;
}
.brand-mark {
display: inline-flex;
align-items: center;
justify-content: center;
width: 30px;
height: 30px;
border-radius: 8px;
background: var(--accent);
color: #fff;
.brand-logo {
display: block;
width: 34px;
height: 34px;
flex: 0 0 auto;
}
.brand-text {
@@ -465,6 +461,72 @@ textarea:focus {
flex-wrap: wrap;
}
.legal-shell {
min-height: 100vh;
background:
radial-gradient(circle at top right, #d9e6ff 0%, transparent 24%),
linear-gradient(180deg, #f8fbff 0%, #eef3fb 100%);
}
.legal-main {
padding: 40px 0 64px;
}
.legal-card {
width: min(860px, calc(100% - 32px));
margin: 0 auto;
padding: 28px;
background: var(--surface);
border: 1px solid var(--line);
border-radius: 12px;
box-shadow: 0 18px 40px rgba(22, 41, 76, 0.08);
}
.legal-eyebrow {
margin-bottom: 10px;
color: var(--accent-strong);
font-size: 13px;
font-weight: 700;
text-transform: uppercase;
}
.legal-title {
margin-bottom: 8px;
}
.legal-subhead {
margin: 0 0 28px;
color: var(--muted);
font-size: 15px;
}
.legal-section + .legal-section {
margin-top: 28px;
}
.legal-section h2 {
margin-bottom: 10px;
font-size: 24px;
}
.legal-section p,
.legal-section li {
color: var(--muted);
}
.legal-section ul {
margin: 0;
padding-left: 20px;
}
.legal-note {
margin-top: 28px;
padding: 16px 18px;
border-radius: 10px;
background: var(--accent-soft);
color: var(--text);
}
@media (max-width: 980px) {
h1 {
font-size: 42px;
@@ -517,4 +579,16 @@ textarea:focus {
.band {
padding: 44px 0;
}
.legal-main {
padding: 28px 0 48px;
}
.legal-card {
padding: 22px;
}
.legal-section h2 {
font-size: 22px;
}
}

140
product/site/terms.html Normal file
View File

@@ -0,0 +1,140 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Terms of Service — SquareMCP</title>
<meta
name="description"
content="SquareMCP terms covering pilot access, acceptable use, customer responsibilities, and service limitations."
/>
<link rel="stylesheet" href="./styles.css?v=20260505b" />
</head>
<body class="legal-shell">
<nav class="topbar">
<div class="wrap topbar-row">
<a class="brand" href="/">
<img class="brand-logo" src="./squaremcp-logo.svg" alt="" />
<span class="brand-text">SquareMCP</span>
</a>
<div class="topbar-actions">
<a class="topbar-link" href="/privacy">Privacy</a>
<a class="button secondary" href="mailto:info@squaremcp.com">Contact</a>
</div>
</div>
</nav>
<main class="legal-main">
<article class="legal-card">
<div class="legal-eyebrow">Legal</div>
<h1 class="legal-title">Terms of Service</h1>
<p class="legal-subhead">Last updated May 5, 2026</p>
<section class="legal-section">
<h2>Agreement</h2>
<p>
These Terms of Service govern your access to and use of SquareMCP, including the
squaremcp.com website, pilot engagements, managed deployments, and related support.
By using SquareMCP, you agree to these Terms.
</p>
</section>
<section class="legal-section">
<h2>Service description</h2>
<p>
SquareMCP provides managed MCP infrastructure and related services for connecting AI
agents to customer-approved internal tools, systems, and data sources.
</p>
</section>
<section class="legal-section">
<h2>Pilot and beta status</h2>
<p>
Some SquareMCP offerings are pilot, beta, or limited-availability services. Features
may change, and services may be modified, suspended, or discontinued at any time,
especially during pilot phases.
</p>
</section>
<section class="legal-section">
<h2>Customer responsibilities</h2>
<p>You are responsible for:</p>
<ul>
<li>providing accurate information during pilot intake and onboarding</li>
<li>ensuring you have authority to connect systems, accounts, and data sources</li>
<li>configuring appropriate permissions, approvals, and internal safeguards</li>
<li>reviewing agent behavior and tool outputs before relying on them in production workflows</li>
<li>complying with applicable laws, regulations, and contractual obligations</li>
</ul>
</section>
<section class="legal-section">
<h2>Acceptable use</h2>
<p>You may not use SquareMCP to:</p>
<ul>
<li>access systems or data without authorization</li>
<li>bypass security controls or usage restrictions</li>
<li>interfere with the service or other users</li>
<li>process unlawful, infringing, or abusive content or workflows</li>
</ul>
</section>
<section class="legal-section">
<h2>Third-party systems</h2>
<p>
SquareMCP depends on third-party providers, APIs, models, cloud services, and customer
systems. We are not responsible for downtime, changes, pricing, restrictions, or data
handling practices of those third parties.
</p>
</section>
<section class="legal-section">
<h2>No warranty</h2>
<p>
SquareMCP is provided on an “as is” and “as available” basis. To the maximum extent
permitted by law, SquareMCP disclaims all warranties, express or implied, including
warranties of merchantability, fitness for a particular purpose, and non-infringement.
</p>
</section>
<section class="legal-section">
<h2>Limitation of liability</h2>
<p>
To the maximum extent permitted by law, SquareMCP will not be liable for indirect,
incidental, special, consequential, exemplary, or punitive damages, or for loss of
data, revenue, profits, or goodwill arising from or related to the service.
</p>
</section>
<section class="legal-section">
<h2>Suspension and termination</h2>
<p>
We may suspend or terminate access if necessary to protect the service, comply with law,
address security risks, or respond to a breach of these Terms.
</p>
</section>
<section class="legal-section">
<h2>Changes</h2>
<p>
We may update these Terms from time to time. Continued use of SquareMCP after updated
Terms are posted constitutes acceptance of the revised Terms.
</p>
</section>
<section class="legal-section">
<h2>Contact</h2>
<p>
Questions about these Terms can be sent to
<a class="footer-link" href="mailto:info@squaremcp.com">info@squaremcp.com</a>.
</p>
</section>
<div class="legal-note">
These Terms are a practical baseline for the current SquareMCP pilot site. They should be
reviewed by counsel before broad commercial rollout or regulated-enterprise contracting.
</div>
</article>
</main>
</body>
</html>