Serve LogicSRC's own OpenProfile.md, and install OpenMCP with one line (#156)

logicsrc.com/.well-known/openprofile.md was a 404 while every relay in the
OpenMCP catalog, Obscura included, named it as its operator. The site that
publishes the spec now serves its own file: Kind organization, accounts
(GitHub, blog, the catalog, the Obscura relay so the trust chain closes both
ways), topics, projects and contact. The root layout carries
rel="openprofile" and every response carries the same relation as a Link
header, per the spec's discovery rules. skill.md and llms.txt point at it.

The OpenMCP spec page and docs/openmcp.md now lead with
curl -fsSL https://openmcp.logicsrc.com/install.sh | sh instead of npx, and
the descriptor examples name logicsrc.com's real profile rather than one
profullstack.com never served.


Claude-Session: https://claude.ai/code/session_01Qh2dieNyPZ4Hx5g3XNJ1Eo

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Anthony Ettinger 2026-09-12 10:55:52 -07:00 • committed by GitHub
parent 22fdfd0c55
commit 0f6326e910
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 94 additions and 5 deletions

View file

@ -0,0 +1,50 @@
const SITE_URL = (process.env.PUBLIC_URL ?? "https://logicsrc.com").replace(/\/$/, "");
// GET /.well-known/openprofile.md: LogicSRC's own OpenProfile.md, the file the
// spec at /openprofile says a domain serves for itself. Relays in the OpenMCP
// catalog name this URL as their operator, so it has to resolve.
export function GET(): Response {
const body = `# LogicSRC
- **Kind**: organization
- **Handle**: @logicsrc
- **Web**: ${SITE_URL}
- **Email**: support@logicsrc.com
- **Avatar**: ${SITE_URL}/icon.svg
- **Parent**: [Profullstack, Inc.](https://profullstack.com)
Open coordination standards for humans, AI agents, plugins, payment systems and hosted products.
## Accounts
- [GitHub](https://github.com/profullstack/logicsrc)
- [GitHub org](https://github.com/logicsrc)
- [Blog](${SITE_URL}/blog)
- [OpenMCP catalog](https://openmcp.logicsrc.com)
- [Obscura relay](https://obscura.openmcp.logicsrc.com)
## Topics
- open standards, coordination, ai agents, mcp, openmcp, openprofile, openresume, openjob, opencreds, asdlc, credential sharing, agent orchestration
## Projects
- [OpenMCP](${SITE_URL}/openmcp): an open catalog of MCP relays, live at https://openmcp.logicsrc.com
- [OpenProfile.md](${SITE_URL}/openprofile): one Markdown file for who and where, people and agents alike
- [ASDLC](${SITE_URL}/asdlc): the agentic software development lifecycle
- [OpenCreds](${SITE_URL}/opencreds): end-to-end encrypted credential sharing
- [Docs](${SITE_URL}/docs): every specification LogicSRC publishes
## Contact
- Support: support@logicsrc.com
- Security: security@profullstack.com
- Privacy: privacy@profullstack.com
`;
return new Response(body, {
headers: {
"content-type": "text/markdown; charset=utf-8",
"cache-control": "public, max-age=3600",
},
});
}

View file

@ -77,6 +77,11 @@ const jsonLd = {
export default function RootLayout({ children }: { children: ReactNode }): ReactNode {
return (
<html lang="en">
<head>
{/* OpenProfile.md discovery (/openprofile, rule "A link element"): the
site points at its own profile, the one relays name as operator. */}
<link rel="openprofile" href={`${SITE_URL}/.well-known/openprofile.md`} />
</head>
<body>
<script
type="application/ld+json"

View file

@ -18,6 +18,8 @@ export function GET(): Response {
## Standards & products
- [ASDLC](${SITE_URL}/asdlc): The Agentic Software Development Lifecycle: nine phases for building software when agents work in parallel and CI/CD is the only gate, with conformance levels and the ratchet rule.
- [OpenMCP](${SITE_URL}/openmcp): An open catalog of MCP relays. Live catalog at https://openmcp.logicsrc.com; CLI installs with \`curl -fsSL https://openmcp.logicsrc.com/install.sh | sh\`.
- [OpenProfile.md](${SITE_URL}/openprofile): One Markdown file for who and where, people and agents alike. This site's own is at ${SITE_URL}/.well-known/openprofile.md.
- [OpenProfile.md](${SITE_URL}/openprofile): One Markdown file that says who you are and where you are, for people and agents alike: identity block, accounts, topics, reshare terms and operator, discovered at /.well-known/openprofile.md or through rel="openprofile".
- [OpenMCP](${SITE_URL}/openmcp): An open catalog of MCP relays: a relay serves /.well-known/openmcp.json, a catalog probes it and lists only what it found, and clients reach every relay through the catalog's REST, its own MCP endpoint, or signed webhooks.
- [AgentSwarm](${SITE_URL}/agent-swarm): Provider-neutral agent orchestration, model routing, and cost controls.

View file

@ -18,11 +18,13 @@ const DESCRIPTOR = `{
"description": "A job board where agents apply to agents.",
"auth": { "kind": "bearer", "open": ["search_jobs", "get_job"] },
"tags": ["jobs", "hiring", "agents"],
"operator": "https://profullstack.com/.well-known/openprofile.md",
"operator": "https://logicsrc.com/.well-known/openprofile.md",
"tools": ["search_jobs", "get_job", "apply_to_job", "post_update"]
}`;
const CLI = `npx @logicsrc/openmcp serve --url https://catalog.example # run a catalog
const INSTALL = `curl -fsSL https://openmcp.logicsrc.com/install.sh | sh`;
const CLI = `openmcp serve --url https://catalog.example # run a catalog
openmcp add https://agenticjobs.work # register by any URL on the relay
openmcp find "post an update" # search every relay's tools
openmcp call agenticjobs.work post_update '{"body":"Shipped."}' --relay-token <t>
@ -177,7 +179,18 @@ export default function OpenMcpPage(): ReactNode {
<div className="band">
<div className="section-head">
<h2>From a terminal</h2>
<p>
One line installs the reference catalog and client under your home directory. No root,
no package manager, and Node 24 is fetched if the box does not have it.
</p>
</div>
<pre style={pre}>{INSTALL}</pre>
<p style={{ color: "#41505d", margin: "0.75rem 0 1rem" }}>
Then <code style={mono}>openmcp update</code> keeps it current and{" "}
<code style={mono}>openmcp uninstall</code> removes exactly what was installed. The catalog
at <a href="https://openmcp.logicsrc.com/">openmcp.logicsrc.com</a> is the default; set{" "}
<code style={mono}>OPENMCP_CATALOG</code> to point at another.
</p>
<pre style={pre}>{CLI}</pre>
</div>
@ -215,7 +228,8 @@ export default function OpenMcpPage(): ReactNode {
</li>
<li>
<a href="https://github.com/logicsrc/openmcp">github.com/logicsrc/openmcp</a>: the
reference catalog and client, <code style={mono}>npx @logicsrc/openmcp</code>
reference catalog and client:{" "}
<code style={mono}>curl -fsSL https://openmcp.logicsrc.com/install.sh | sh</code>
</li>
<li>
<Link href="/openprofile">OpenProfile.md</Link>, the operator behind a relay;{" "}

View file

@ -19,6 +19,8 @@ Base URL: ${SITE_URL}
- Blog feed: ${SITE_URL}/blog/rss.xml
- Sitemap: ${SITE_URL}/sitemap.xml
- LLM orientation: ${SITE_URL}/llms.txt
- Who runs this site, as OpenProfile.md: ${SITE_URL}/.well-known/openprofile.md
- OpenMCP catalog of MCP relays: https://openmcp.logicsrc.com (install the CLI: curl -fsSL https://openmcp.logicsrc.com/install.sh | sh)
## What you can do here