|
| 1 | +\documentclass[twocolumn]{article} |
| 2 | +\usepackage{geometry} |
| 3 | +\geometry{legalpaper, left=1cm, right=1cm, top=1cm, bottom=1cm, landscape} |
| 4 | +\setlength\columnseprule{1pt} |
| 5 | +\setlength\columnsep{2cm} |
| 6 | +\usepackage{tikz} |
| 7 | +\usetikzlibrary{calc} |
| 8 | +\usetikzlibrary{shapes.geometric} |
| 9 | +\usepackage[T1]{fontenc} |
| 10 | +\usepackage{lmodern} |
| 11 | +\usepackage{fontawesome5} |
| 12 | +\usepackage{listings} |
| 13 | +\lstset{basicstyle=\ttfamily, language=bash} |
| 14 | +\newcommand{\ICON}{\fontsize{28}{0}\selectfont} |
| 15 | +\usepackage{tabularray} |
| 16 | +\usepackage{threeparttable} |
| 17 | +\usepackage{hyperref} |
| 18 | + |
| 19 | +% Figure position configuration |
| 20 | +\newcommand{\FigureCenterX}{7.5} |
| 21 | +\newcommand{\FigureCenterY}{-10.8} |
| 22 | + |
| 23 | +\tikzset{ |
| 24 | + every picture/.style={ |
| 25 | + line width=1.5pt, |
| 26 | + }, |
| 27 | + conn/.style = { |
| 28 | + shorten >=5pt, |
| 29 | + shorten <=5pt, |
| 30 | + -> |
| 31 | + }, |
| 32 | + connaux/.style = { |
| 33 | + shorten >=5pt, |
| 34 | + shorten <=5pt, |
| 35 | + dashed, |
| 36 | + -> |
| 37 | + }, |
| 38 | +} |
| 39 | + |
| 40 | +\tikzset{ |
| 41 | + pics/.cd, |
| 42 | + pic user/.style={code={ |
| 43 | + \coordinate (head-center) at (0,0); |
| 44 | + \coordinate (top) at ([yshift=-2mm]head-center); |
| 45 | + \coordinate (left) at ([yshift=-10mm,xshift=-7mm]head-center); |
| 46 | + \coordinate (right) at ([yshift=-10mm,xshift=7mm]head-center); |
| 47 | + \draw [rounded corners=1.5mm] |
| 48 | + (top) to [out=-10,in=100] |
| 49 | + (right) to [bend left=15] |
| 50 | + (left) to [out=80,in=190] |
| 51 | + (top); |
| 52 | + \draw [fill=white,opacity=1] (head-center) circle (0.41); |
| 53 | + }}, |
| 54 | + pic doc/.style={code={ |
| 55 | + \node [draw, fill=white, minimum height=1.3cm, minimum width=1cm] |
| 56 | + (docpage) at (0,0) {}; |
| 57 | + \draw [white, fill=white] |
| 58 | + ($(docpage.north east)+(-3mm,0)$) |
| 59 | + --++ (3mm,0) --++ (0,-3mm) -- cycle; |
| 60 | + \fill [black] |
| 61 | + ($(docpage.north east)+(0,-3mm)$) |
| 62 | + --++ (0,-1mm) --++ (-4mm,0) --++ (0,4mm) --++ (1mm,0) -- cycle; |
| 63 | + \node at (0, -0.15) {\LARGE \faServer}; |
| 64 | + }}, |
| 65 | + pic docs/.style={code={ |
| 66 | + \pic at (0,0) {pic doc}; |
| 67 | + \pic at (-0.5,-0.25) {pic doc}; |
| 68 | + \pic at (-1,-0.5) {pic doc}; |
| 69 | + }}, |
| 70 | + pic randomdocs/.style={code={ |
| 71 | + \pic at (0,0) {pic doc}; |
| 72 | + \pic at (-0.5,-0.3) {pic doc}; |
| 73 | + \pic at (0.4,-0.9) {pic doc}; |
| 74 | + }}, |
| 75 | +} |
| 76 | + |
| 77 | +\begin{document} |
| 78 | +\pagestyle{empty} |
| 79 | +\sffamily |
| 80 | + |
| 81 | +\begin{tikzpicture}[remember picture] |
| 82 | + % Title |
| 83 | + \node at (7.5,-0.8) {\Huge MCP Registry Cheat Sheet}; |
| 84 | + \node at (7.5,-1.6) {\href{https://github.com/subbyte/mcp-registry-cheatsheet}{\faGithub \hspace{1mm} subbyte/mcp-registry-cheatsheet}}; |
| 85 | + |
| 86 | + % Registry |
| 87 | + \node (reg) [regular polygon, |
| 88 | + regular polygon sides = 6, |
| 89 | + inner sep = 1.3cm, |
| 90 | + shape border rotate=30, |
| 91 | + draw] at (\FigureCenterX, \FigureCenterY) |
| 92 | + {}; |
| 93 | + \pic at ($ (reg) + (1,-0.3) $) {pic docs}; |
| 94 | + \node at ($ (reg) + (0,1.1) $) {\Large Registry}; |
| 95 | + |
| 96 | + % Borders |
| 97 | + \draw [dotted] (reg) -- ++(0,8); |
| 98 | + \draw [dotted] (reg) -- ++(-7,-4); |
| 99 | + \draw [dotted] (reg) -- ++(7,-4); |
| 100 | + |
| 101 | + % Server user |
| 102 | + \pic [local bounding box=serveruser] |
| 103 | + at ($ (reg) + (-5.5,5.5) $) {pic user}; |
| 104 | + \node (serverusert) at ($ (serveruser) + (0,-1.1) $) {MCP Server User}; |
| 105 | + \pic [local bounding box=userjson] |
| 106 | + at ($ (reg) + (-1.5,5.5) $) {pic doc}; |
| 107 | + \pic [local bounding box=userjsons] |
| 108 | + at ($ (reg) + (-5.5,0.5) $) {pic randomdocs}; |
| 109 | + \draw [conn] (serveruser) to[out=-10,in=115] |
| 110 | + node[midway, sloped, below] {Get} (reg); |
| 111 | + \draw [connaux] (reg) to[out=115,in=-90] (userjson); |
| 112 | + \draw [conn] (serverusert) to[out=-75,in=160] |
| 113 | + node[midway, sloped, above] {List/Search} (reg); |
| 114 | + \draw [connaux] (reg) to[out=160,in=30] (userjsons); |
| 115 | + |
| 116 | + % Server developer |
| 117 | + \pic [local bounding box=serverdev] |
| 118 | + at ($ (reg) + (6.5,4) $) {pic user}; |
| 119 | + \node (serverdevt) at ($ (serverdev) + (0,-1.1) $) {MCP Server Developer}; |
| 120 | + \pic [local bounding box=serverjsondev] |
| 121 | + at ($ (reg) + (2.5,6.5) $) {pic doc}; |
| 122 | + \node (devgithub) |
| 123 | + at ($ (reg) + (3.5,1.4) $) {\ICON \faGithub}; |
| 124 | + \node (devdomain) |
| 125 | + at ($ (reg) + (5.8,-1.2) $) {\ICON \faGlobe}; |
| 126 | + \draw [conn] (serverdev) to[out=70,in=50] |
| 127 | + node[midway, sloped, above] {Create} (serverjsondev); |
| 128 | + \draw [conn] (serverdev) to[out=110,in=10] |
| 129 | + node[midway, sloped, below] {Edit} (serverjsondev); |
| 130 | + \draw [connaux] (serverjsondev) to[out=-90,in=70] (reg); |
| 131 | + \draw [conn] (serverdev) to[out=170,in=70] |
| 132 | + node[midway, sloped, below] {Publish} (reg); |
| 133 | + \draw [conn] (serverdevt) to[out=-80,in=-10] |
| 134 | + node[midway, sloped, above] {Login} (reg); |
| 135 | + \draw [connaux] (devgithub) to[out=-90,in=-10] (reg); |
| 136 | + \draw [connaux] (serverdevt) to[out=-80,in=60] |
| 137 | + node[midway, sloped, below] {Public Key} (devdomain); |
| 138 | + \draw [connaux] (devdomain) to[out=190,in=-10] (reg); |
| 139 | + |
| 140 | + % Registry admin |
| 141 | + \pic [local bounding box=regadmin] |
| 142 | + at ($ (reg) + (0,-6) $) {pic user}; |
| 143 | + \node (regadmint) at ($ (regadmin) + (0,-1.1) $) {MCP Registry Admin}; |
| 144 | + \node (admintoken) |
| 145 | + at ($ (reg) + (-1,-6.5) $) {\ICON \faTicket*}; |
| 146 | + \pic [local bounding box=adminjson] |
| 147 | + at ($ (reg) + (3.8,-4) $) {pic doc}; |
| 148 | + \draw [conn] (regadmin) to[out=150,in=-130] |
| 149 | + node[midway, sloped, above] {Auth} (reg); |
| 150 | + \draw [conn] (regadmin) to[out=115,in=-110] |
| 151 | + node[midway, sloped, above] {Setup} (reg); |
| 152 | + \draw [connaux] (reg) to[out=-130,in=160] (admintoken); |
| 153 | + \draw [conn] (regadmin) to[out=60,in=-70] |
| 154 | + node[midway, sloped, above] {Takedown} (reg); |
| 155 | + \draw [conn] (regadmin) to[out=30,in=-50] |
| 156 | + node[midway, sloped, above] {Update} (reg); |
| 157 | + \draw [connaux] (adminjson) to[out=160,in=-50] (reg); |
| 158 | + |
| 159 | + % Not using overlay mode; no automatic bounding box drawing |
| 160 | + % This enanbles pic naming/reference |
| 161 | + \pgfresetboundingbox |
| 162 | +\end{tikzpicture} |
| 163 | + |
| 164 | +\pagebreak |
| 165 | + |
| 166 | +\begin{threeparttable} |
| 167 | + \vspace{3mm} |
| 168 | + \hspace{-3mm} |
| 169 | + \begin{tblr}{ |
| 170 | + width=\linewidth, |
| 171 | + colspec={l l}, |
| 172 | + } |
| 173 | + GitHub Repository & \href{https://github.com/modelcontextprotocol/registry}{https://github.com/modelcontextprotocol/registry} \\ |
| 174 | + RESTful API Spec & \href{https://registry.modelcontextprotocol.io/docs}{https://registry.modelcontextprotocol.io/docs} \\ |
| 175 | + \end{tblr} |
| 176 | +\end{threeparttable} |
| 177 | + |
| 178 | +\section*{MCP Server User} |
| 179 | + |
| 180 | +\begin{threeparttable} |
| 181 | + \begin{tblr}{ |
| 182 | + width=\linewidth, |
| 183 | + hline{1,Z} = {1pt}, |
| 184 | + hline{2} = {dashed}, |
| 185 | + row{1} = {font=\bfseries}, |
| 186 | + colspec={l l l l X[,l]}, |
| 187 | + } |
| 188 | + Action & API & Endpoint & Arguments\tnote{1} & Description \\ |
| 189 | + List/Search & GET & \texttt{/v0/servers} & search/limit/cursor & Searching for servers with pagination \\ |
| 190 | + Get & GET & \texttt{/v0/servers/\{id\}} & server UUID & Retrieving spec for specified server \\ |
| 191 | + \end{tblr} |
| 192 | + \begin{tablenotes} |
| 193 | + \item[1] Full argument list detailed in API specification |
| 194 | + \end{tablenotes} |
| 195 | +\end{threeparttable} |
| 196 | + |
| 197 | +\section*{MCP Server Developer} |
| 198 | + |
| 199 | +\begin{threeparttable} |
| 200 | + \begin{tblr}{ |
| 201 | + width=\linewidth, |
| 202 | + hline{1,Z} = {1pt}, |
| 203 | + hline{2} = {dashed}, |
| 204 | + row{1} = {font=\bfseries}, |
| 205 | + colspec={l l l X[,l]}, |
| 206 | + } |
| 207 | + Action & API & Command\tnote{1} & Description \\ |
| 208 | + Create & & \lstinline{mcp-publisher init} & Creating \lstinline{server.json}\tnote{2} file from template \\ |
| 209 | + Login & POST & \lstinline{mcp-publisher login <method>} & Login through select authentication method\tnote{3} \\ |
| 210 | + Publish & POST & \lstinline{mcp-publisher publish} & Publishing \lstinline{server.json} file to registry \\ |
| 211 | + \end{tblr} |
| 212 | + \begin{tablenotes} |
| 213 | + \item[1] Installation: \lstinline{brew install mcp-publisher} |
| 214 | + \item[2] \lstinline{server.json} specification: \href{https://github.com/modelcontextprotocol/registry/blob/main/docs/reference/server-json/generic-server-json.md}{\{registry\_repo\}/docs/reference/server-json/generic-server-json.md} |
| 215 | + \item[3] JWT token of login session stored at \lstinline{$HOME/.mcp_publisher_token} |
| 216 | + \end{tablenotes} |
| 217 | +\end{threeparttable} |
| 218 | + |
| 219 | +\vspace{3mm} |
| 220 | +\begin{threeparttable} |
| 221 | + \begin{tblr}{ |
| 222 | + width=\linewidth, |
| 223 | + hline{1,Z} = {1pt}, |
| 224 | + hline{2} = {dashed}, |
| 225 | + row{1} = {font=\bfseries}, |
| 226 | + colspec={l l l X[,l]}, |
| 227 | + } |
| 228 | + Login Method & \SetCell[c=2]{l} Publishable MCP Server Namespaces & & Description \\ |
| 229 | + github & \lstinline{io.github.<owner>/*} & \lstinline{io.github.<org>/*} & Repos at owner and owner's orgs \\ |
| 230 | + github-oidc & \lstinline{io.github.<entity>/*} & & For GitHub Actions use \\ |
| 231 | + dns & \lstinline{com.<company>/*} & \lstinline{com.<company>.*} & Domain and subdomains \\ |
| 232 | + http & \lstinline{com.<company>/*} & & Domain (no subdomain) \\ |
| 233 | + \end{tblr} |
| 234 | +\end{threeparttable} |
| 235 | + |
| 236 | +\section*{MCP Registry Admin} |
| 237 | + |
| 238 | +\begin{threeparttable} |
| 239 | + \begin{tblr}{ |
| 240 | + width=\linewidth, |
| 241 | + hline{1,Z} = {1pt}, |
| 242 | + hline{2} = {dashed}, |
| 243 | + row{1} = {font=\bfseries}, |
| 244 | + colspec={l l l X[,l]}, |
| 245 | + } |
| 246 | + Action & API & Script\tnote{1} & Description \\ |
| 247 | + Setup & & & Setup local/docker/k8s development or deployment\tnote{2} subregistry \\ |
| 248 | + Auth & POST & \lstinline{auth.sh} & Exchanging OIDC token for registry admin JWT token \\ |
| 249 | + Update & PUT & & Overwriting specified server specification in the registry \\ |
| 250 | + Takedown & PUT & \lstinline{takedown.sh} & An update action assigning: \lstinline{server.status = "deleted"} \\ |
| 251 | + \end{tblr} |
| 252 | + \begin{tablenotes} |
| 253 | + \item[1] \href{https://github.com/modelcontextprotocol/registry/tree/main/tools/admin}{\{registry\_repo\}/tools/admin/} |
| 254 | + \item[2] \href{https://github.com/modelcontextprotocol/registry/tree/main/deploy}{\{registry\_repo\}/deploy/} |
| 255 | + \end{tablenotes} |
| 256 | +\end{threeparttable} |
| 257 | + |
| 258 | +\end{document} |
0 commit comments