mirror of
https://github.com/profullstack/logicsrc.git
synced 2026-10-02 04:43:58 +00:00
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:
parent
22fdfd0c55
commit
0f6326e910
7 changed files with 94 additions and 5 deletions
|
|
@ -24,6 +24,12 @@ const securityHeaders = [
|
|||
{ key: "X-Frame-Options", value: "SAMEORIGIN" },
|
||||
{ key: "Referrer-Policy", value: "strict-origin-when-cross-origin" },
|
||||
{ key: "Permissions-Policy", value: "camera=(), microphone=(), geolocation=()" },
|
||||
// OpenProfile.md discovery for responses that are not HTML (feeds, JSON,
|
||||
// the specs as Markdown): the same relation the root layout puts in <head>.
|
||||
{
|
||||
key: "Link",
|
||||
value: `<${(process.env.PUBLIC_URL ?? "https://logicsrc.com").replace(/\/$/, "")}/.well-known/openprofile.md>; rel="openprofile"`,
|
||||
},
|
||||
];
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
},
|
||||
});
|
||||
}
|
||||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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;{" "}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ A relay serves a JSON document at `/.well-known/openmcp.json` on its own origin.
|
|||
"url": "https://agenticjobs.work",
|
||||
"auth": { "kind": "bearer", "url": "https://agenticjobs.work/me/tokens", "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",
|
||||
"webhooks": "https://agenticjobs.work/api/v1/webhooks",
|
||||
"tools": ["search_jobs", "get_job", "apply_to_job", "post_update"],
|
||||
"catalogs": ["https://openmcp.logicsrc.com"]
|
||||
|
|
@ -151,7 +151,17 @@ A conforming client:
|
|||
|
||||
## Serving one
|
||||
|
||||
By hand, or `openmcp descriptor <mcp url>` prints a template. [agenticjobs](https://agenticjobs.work), [tsbb](https://tsbb.dev) and [myna](https://mynaposter.com) serve one. The reference catalog runs on Node 24 with one SQLite file: `npx @logicsrc/openmcp serve`.
|
||||
By hand, or `openmcp descriptor <mcp url>` prints a template. [agenticjobs](https://agenticjobs.work), [tsbb](https://tsbb.dev) and [myna](https://mynaposter.com) serve one. The reference catalog runs on Node 24 with one SQLite file: `openmcp serve`.
|
||||
|
||||
## The reference implementation
|
||||
|
||||
[github.com/logicsrc/openmcp](https://github.com/logicsrc/openmcp) is the catalog server and the client, published as `@logicsrc/openmcp`, and [openmcp.logicsrc.com](https://openmcp.logicsrc.com) is a live catalog running it. One line installs the `openmcp` command under your home directory, with no root and no package manager, fetching Node 24 if the box does not have it:
|
||||
|
||||
```sh
|
||||
curl -fsSL https://openmcp.logicsrc.com/install.sh | sh
|
||||
```
|
||||
|
||||
`openmcp update` re-runs the installer; `openmcp uninstall` removes exactly the paths it wrote, from a manifest, with no network. The live catalog is the default target; `OPENMCP_CATALOG` or `--catalog` points the client at another.
|
||||
|
||||
## Related standards
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue