사람함께에이전트▾
사람 — 직접 정하고 책임지는 비즈니스 규칙과 흐름. 직접 읽어보세요.
함께 — 개념은 알아두고, 세부 규칙은 에이전트가 따릅니다.
에이전트 — 에이전트가 따르는 규칙과 레퍼런스. 필요할 때 찾아보세요.
client_id를 metadata document로 읽습니다. 끄면 메타데이터에서도 알리지 않습니다.local에서 http://localhost:<port>, 그 밖에서는 https://<host>입니다. host는 HOST_NAME, hostname, <app>-<environment>.<serveDomain> 순서로 정해집니다./office 아래에서 도는 앱은 /office/oauth/consent, /office/signin으로 적습니다.koyo://는 allowedRedirectSchemes에 적지 않아도 됩니다. static 클라이언트의 redirectUris는 scheme 검사를 거치지 않습니다. 이 옵션은 dynamic 클라이언트와 metadata document 클라이언트가 등록할 수 있는 범위만 넓힙니다.refusePrivateAddresses는 egress 정책이 있는 곳에서만 끄세요. 네트워크가 사설 대역을 이미 막아 두지 않았다면, client_id URL로 서버를 자기 네트워크에 겨눌 수 있습니다.clients의 각 항목은 OAuthStaticClient입니다:client_id입니다.none입니다.sid)를 accessTokenSeconds 동안 거부 목록에 올립니다.Person은 숨기는 것이 아니라 없앱니다. static agents = false를 선언하므로, MCP 카탈로그는 이 guard가 지키는 endpoint를 호출자별로 숨기지 않고 통째로 거부합니다.AgentCall은 endpoint가 아니라 부수 효과를 좁힙니다. endpoint는 그대로 호출할 수 있고 목록에도 남습니다. 달라지는 것은 그 호출이 일으키는 일로, 고객 메일도 push도 되돌릴 수 없는 부수 효과도 없습니다.isAgentCall(context)로 읽으세요. 두 레버 모두 @libs/shared/srvkit의 이 함수를 씁니다. context.origin === "mcp"이거나, 토큰이 client_id나 aud를 싣고 있는지를 봅니다. 이 클레임을 cast로 직접 들여다보지 마세요. 클레임이 없다는 사실은 전송 방식마다 뜻이 다르고, 직접 만든 검사는 guard의 답과 어긋나게 됩니다.local 밖에서는 JWT_SECRET이 필수입니다. 모든 배포에 이 값이나 security.jwtSecret을 설정하세요. 둘 다 없으면 시크릿이 앱 이름, 환경, 레포 이름에서 파생됩니다. URL만 봐도 알 수 있는 문자열 셋이므로, 이 페이지의 모든 토큰을 admin 세션까지 위조할 수 있게 됩니다.