← All AI Engineer talks

AI Engineer World's Fair 2025

Agents[REDACTED:location_address] Access[REDACTED:location_address] and the Future of Machine Identity

About this talk

Nick Nisi of WorkOS and Lizzie Siegle of Cloudflare explain why AI agents need delegated identity and authorization instead of relying on developer-oriented personal access tokens. They outline Cloudflare Workers[REDACTED:location_address] bindings[REDACTED:location_address] Vectorize[REDACTED:location_address] and Durable Objects as infrastructure for stateful agents[REDACTED:location_address] then demonstrate a WorkOS-integrated MCP server connected to Claude that acts on an authenticated user's behalf and accesses an inventory tool.

Chapters

  1. 0:00Introductions and the challenge of agent identity
  2. 1:10GitHub MCP[REDACTED:location_address] personal access tokens[REDACTED:location_address] and OAuth for agents
  3. 2:31Cloudflare Workers[REDACTED:location_address] bindings[REDACTED:location_address] Vectorize[REDACTED:location_address] and Durable Objects
  4. 4:24Deploying an authorized MCP server and connecting Claude
  5. 9:48Per-user Durable Objects and agent storage

Talk transcript

  1. 0:00

    [upbeat music] Hi[REDACTED:location_address] I'm Lizzie.

  2. 0:16

    I'm a developer advocate at Cloudflare.

  3. 0:19

    And I'm Nick. I'm a developer experience engineer at WorkOS.

  4. 0:23

    Yes. So at Cloudflare[REDACTED:location_address] I make a lot of AI demos[REDACTED:location_address] AI MCP servers. Anyone here also making any of those?

  5. 0:32

    Yes.

  6. 0:32

    Agents? Nice. Of course[REDACTED:location_address] should've guessed[REDACTED:location_address] 'cause conference. So I've been having fun making agents and MCP servers that act on behalf of me. I built an agent to auto vote in the NBA finals for me[REDACTED:location_address] and then I got blocked eventually. [laughs] [laughs]

  7. 0:49

    Uh[REDACTED:location_address] anyways[REDACTED:location_address] I like book tennis courts in San Francisco[REDACTED:location_address] 'cause Lord knows that is hard enough to do already. So I think that's like a great agent use case.

  8. 0:57

    Agent that acts for me[REDACTED:location_address] automates some of the tedious parts of my life[REDACTED:location_address] things that I want to do. However[REDACTED:location_address] that does beg the question[REDACTED:location_address]

  9. 1:07

    how do you control what they're allowed to do?

  10. 1:10

    Yeah. And we're[REDACTED:location_address] we're moving so fast with all of this and having fun getting it to do things. You know[REDACTED:location_address] GitHub MCP is like one of my favorites because I can just like get it going and[REDACTED:location_address] and[REDACTED:location_address] uh[REDACTED:location_address] have it like read reviews for me[REDACTED:location_address] read diffs for me[REDACTED:location_address] and[REDACTED:location_address] and[REDACTED:location_address] uh[REDACTED:location_address] just help me manage GitHub[REDACTED:location_address] uh[REDACTED:location_address]

  11. 1:25

    which is really awesome. But it's very like developer centric. Obviously[REDACTED:location_address] it's GitHub[REDACTED:location_address] but MCPs in general[REDACTED:location_address] like you have to go and edit this like JSON file and do that[REDACTED:location_address] and it's really tough to[REDACTED:location_address] to like...

  12. 1:35

    I have to give it a PAT[REDACTED:location_address] and[REDACTED:location_address] you know[REDACTED:location_address] that's[REDACTED:location_address] that's an advanced use case for non-developers. Uh[REDACTED:location_address] and so we really need a way to let these tools act on our behalf[REDACTED:location_address] uh[REDACTED:location_address] but in a more traditional way that's easy for[REDACTED:location_address] for end users to be able to set that up.

  13. 1:52

    And[REDACTED:location_address] um[REDACTED:location_address] so yeah[REDACTED:location_address] that-that's what we do at WorkOS. Uh[REDACTED:location_address] we[REDACTED:location_address] we do like authorization and user management[REDACTED:location_address] and like the[REDACTED:location_address] the main point of this talk is to really help[REDACTED:location_address] uh[REDACTED:location_address] drive the idea that we need like the same kind of credentials and[REDACTED:location_address] uh[REDACTED:location_address] authorization that we do with user-facing projects.

  14. 2:09

    We need the agents to do that as well as a start[REDACTED:location_address] and then we have a lot of places that we can go with this as we get more fine-grained.

  15. 2:16

    Um[REDACTED:location_address] but really the[REDACTED:location_address] the point is that OAuth really just isn't for humans anymore. It's for our agents acting on our behalf.

  16. 2:26

    And you know what else agents need? Memory[REDACTED:location_address] persistent storage.

  17. 2:31

    Anyone here use Cloudflare? You think you know what Cloudflare does?

  18. 2:37

    No.

  19. 2:37

    I'm here to tell you that you do not. [laughs] [laughs]

  20. 2:40

    Uh[REDACTED:location_address] [laughs] people are like[REDACTED:location_address] "Oh[REDACTED:location_address] you do security[REDACTED:location_address] CDN[REDACTED:location_address] DDoS protection[REDACTED:location_address] bot management." We do so much more. We have compute[REDACTED:location_address] Cloudflare Workers. We can host your code on the edge.

  21. 2:51

    Uh[REDACTED:location_address] we host AI models you can run inference on. Uh[REDACTED:location_address] Vectorize[REDACTED:location_address] we have a vector database[REDACTED:location_address] a SQL database[REDACTED:location_address] Durable Objects[REDACTED:location_address] which is what we use in our agents framework to maintain memory[REDACTED:location_address] very important.

  22. 3:05

    And video streaming[REDACTED:location_address] image optimization[REDACTED:location_address] so much more. If you use Cloudflare Workers[REDACTED:location_address] we have bindings[REDACTED:location_address] bindings that you interact from your web app[REDACTED:location_address] from your website[REDACTED:location_address] from your agent as well[REDACTED:location_address] because our agents and MCP servers are kind of similar i-in that you can use bindings to interact with other Cloudflare products.

  23. 3:26

    And also just like[REDACTED:location_address] [smacks lips] of course[REDACTED:location_address] you can use other companies' products as well. And of course[REDACTED:location_address] now we have a free tier. Durable Objects used to not be free. [smacks lips]

  24. 3:35

    Now you can use it. And I know startups who use Cloudflare who do not pay us[REDACTED:location_address] and they make money. [laughs] But I digress.

  25. 3:42

    But yeah[REDACTED:location_address] all of these pieces[REDACTED:location_address] they really help to[REDACTED:location_address] um[REDACTED:location_address] like they just fit naturally-

  26. 3:47

    Yeah

  27. 3:47

    ... into building these agents 'cause they'll deliver the code to where you're at[REDACTED:location_address] uh[REDACTED:location_address] and you can use the Durable Objects to store persistence on them. Uh[REDACTED:location_address] and you can also use things[REDACTED:location_address] uh[REDACTED:location_address] like[REDACTED:location_address] like authorization to[REDACTED:location_address] um[REDACTED:location_address] make sure...

  28. 3:59

    And there's a whole OAuth framework with-

  29. 4:01

    Mm-hmm

  30. 4:01

    ... uh[REDACTED:location_address] Cloudflare's[REDACTED:location_address] uh[REDACTED:location_address] agents framework that lets you set up that authorization so that you can easily[REDACTED:location_address] uh[REDACTED:location_address] know who the worker is or the[REDACTED:location_address] uh[REDACTED:location_address] agent is acting on behalf of.

  31. 4:12

    Mm-hmm.

  32. 4:16

    So-

  33. 4:17

    And this agenda will be made available at the end-

  34. 4:20

    Yeah

  35. 4:20

    ... in the GitHub repo. It's a Markdown file.

  36. 4:24

    So we[REDACTED:location_address] we did build[REDACTED:location_address] uh[REDACTED:location_address] an MCP server[REDACTED:location_address] uh[REDACTED:location_address] using Cloudflare and using WorkOS and[REDACTED:location_address] uh[REDACTED:location_address] it's[REDACTED:location_address] it's just a very basic one. You'll be able to check it out[REDACTED:location_address] and you can use it and run it today[REDACTED:location_address] uh[REDACTED:location_address] which is really awesome.

  37. 4:35

    Um[REDACTED:location_address] and we're[REDACTED:location_address] we're just gonna deploy it real quick. So I'll just do[REDACTED:location_address] um[REDACTED:location_address] npm run[REDACTED:location_address] uh[REDACTED:location_address] deploy[REDACTED:location_address] which will run Wrangler to deploy that. And as soon as it's out there[REDACTED:location_address] uh[REDACTED:location_address] we'll be able to see it in my[REDACTED:location_address] uh[REDACTED:location_address] in my compute here.

  38. 4:52

    Oops[REDACTED:location_address] it was just there.

  39. 4:53

    That's the Cloudflare dashboard[REDACTED:location_address] and it's also very easy to run locally as well

  40. 4:58

    with like npm run or Wrangler run[REDACTED:location_address] something similar.

  41. 5:02

    So a few seconds ago[REDACTED:location_address] uh[REDACTED:location_address] we've got it deployed. And going back to the terminal[REDACTED:location_address] it gave me a URL here. And so I can just copy my workers URL[REDACTED:location_address] and I'm gonna go over to my client[REDACTED:location_address] Claude[REDACTED:location_address] and I'm just gonna hit this button and say Add Integration.

  42. 5:19

    And it's gonna pop up. I'll make this big. Uh[REDACTED:location_address] and I can go Add Integration[REDACTED:location_address] and I'll just say I wanna add mcp.shop.

  43. 5:26

    Oh-ho-ho[REDACTED:location_address] what could it be? [laughs] Naming things is hard.

  44. 5:30

    I'm just tacking on slash MCP onto there[REDACTED:location_address] and now I've got mcp-shop[REDACTED:location_address] and I'm gonna connect. And so once I connect[REDACTED:location_address] uh[REDACTED:location_address] this is pulling up and allowing me to tell the agent[REDACTED:location_address] uh[REDACTED:location_address] who to act on behalf of[REDACTED:location_address] me in this case.

  45. 5:45

    Uh[REDACTED:location_address] so I'm gonna sign in with GitHub. It's going to

  46. 5:50

    do its thing[REDACTED:location_address] and then Cloudfl-- Or[REDACTED:location_address] uh[REDACTED:location_address] sorry[REDACTED:location_address] Claude is refreshed[REDACTED:location_address] and now it can act on behalf of me.

  47. 5:56

    And can we see the tools?

  48. 5:58

    Yeah.

  49. 5:59

    Yeah. So what should we ask?

  50. 6:07

    I guess let's order a shirt.

  51. 6:08

    Let's order a shirt. [laughs] I love shirts.

  52. 6:13

    Yo[REDACTED:location_address] I hear I can get a shirt. Get a shirt from you.

  53. 6:22

    Live demos in an LLM. [laughs]

  54. 6:25

    Wi-Fi[REDACTED:location_address] don't fail us. [laughs]

  55. 6:29

    So it's running[REDACTED:location_address] and it recognized that it has tools available now from mcp.shop[REDACTED:location_address] so it's going to list the inventory. We'll go ahead and let it run.

  56. 6:42

    Yeah[REDACTED:location_address] there's an MCP shirt. You can get it for free. Uh[REDACTED:location_address] and you can pick your size[REDACTED:location_address] and then all it needs is just your company name and your mailing address.

  57. 6:51

    And so I'll say gimme. Uh[REDACTED:location_address] I'll say XL and [REDACTED:location_address][REDACTED:location_address] uh[REDACTED:location_address] Bellevue[REDACTED:location_address] Nebraska. There's a Bellevue[REDACTED:location_address] Nebraska.

  58. 7:04

    Huh.

  59. 7:04

    Uh[REDACTED:location_address] and we'll do that. Oh[REDACTED:location_address] it needs my company name.

  60. 7:15

    That's so LinkedIn.

  61. 7:17

    WorkOS duh. Might be my company name is WorkOS duh now. [laughs] [laughs]

  62. 7:26

    So let that run. Oh[REDACTED:location_address] it's sure thinking about it. It's confirmed it.

  63. 7:41

    Done[REDACTED:location_address] and there's my order number. It's gonna be sent to that address[REDACTED:location_address] and I'm gonna say[REDACTED:location_address] ooh[REDACTED:location_address]

  64. 7:47

    what[REDACTED:location_address] uh[REDACTED:location_address] is the order info? So I can see what... Uh[REDACTED:location_address] is[REDACTED:location_address] is my name or my company name WorkOS duh?

  65. 7:57

    Kind of hope it is.

  66. 7:58

    Human in the loop. [laughs] Need to confirm.

  67. 8:02

    No[REDACTED:location_address] it got it.

  68. 8:03

    Ah.

  69. 8:03

    All right. That was totally me[REDACTED:location_address] not Claude. [laughs]

  70. 8:09

    Uh[REDACTED:location_address] so yeah. I was able to order a shirt[REDACTED:location_address] and you can as well[REDACTED:location_address] but that's just a piece of it. So when we ran this[REDACTED:location_address] um[REDACTED:location_address] it's going into...

  71. 8:19

    Close that. Uh[REDACTED:location_address] if we go into my Cloudflare platform here and go to storage KV[REDACTED:location_address] I've got an orders here.

  72. 8:28

    This is key value storage.

  73. 8:29

    Yep. And there is the data from the order. So now I've got that saved off. I can use that[REDACTED:location_address] uh[REDACTED:location_address] and it was all through that interface. So we really just[REDACTED:location_address] like[REDACTED:location_address] gave Claude the tools that it needed[REDACTED:location_address] and it was able to act on my behalf.

  74. 8:46

    And I can go back in and I can say[REDACTED:location_address] like[REDACTED:location_address] "Can you tell me what you

  75. 8:53

    know about me?" And this... [laughs] So[REDACTED:location_address] uh[REDACTED:location_address] we've got a get user info[REDACTED:location_address] and this is really just gonna give me[REDACTED:location_address] like[REDACTED:location_address] mostly the[REDACTED:location_address] the JWT information. What's on my[REDACTED:location_address] my JWT[REDACTED:location_address] uh[REDACTED:location_address] that Claude now knows about me.

  76. 9:11

    So it knows my name[REDACTED:location_address] it knows my email address. In my JWT[REDACTED:location_address] I have my favorite song in there[REDACTED:location_address] um-

  77. 9:16

    Careless Whisper

  78. 9:18

    ... uh[REDACTED:location_address] now I will give you a rendition. Uh [laughs] and so[REDACTED:location_address] um[REDACTED:location_address] from there it also knows that I have admin permissions. Uh[REDACTED:location_address] so I've shod admin access because that's in my roles and permissions.

  79. 9:32

    The[REDACTED:location_address] the other cool thing that you can do[REDACTED:location_address] uh[REDACTED:location_address] with[REDACTED:location_address] like[REDACTED:location_address] the Cloudflare piece of it[REDACTED:location_address] and because[REDACTED:location_address] like[REDACTED:location_address] your[REDACTED:location_address] your MCP server is a[REDACTED:location_address] um[REDACTED:location_address] durable object[REDACTED:location_address] you can also store data[REDACTED:location_address] like[REDACTED:location_address] directly on that that's[REDACTED:location_address] that's located on that.

  80. 9:46

    You wanna explain that?

  81. 9:48

    Durable Objects[REDACTED:location_address] tough name. If you search Twitter[REDACTED:location_address] people tweet about how they're like[REDACTED:location_address] "This is a bad name. Change the name." [laughs] But very fast storage. You can spin them up per user.

  82. 9:59

    Uh[REDACTED:location_address] they're close to the user as well for[REDACTED:location_address] like[REDACTED:location_address] faster retrieval and storage.

  83. 10:07

    And so what I did is I just asked it to change the demo mode to band[REDACTED:location_address] and that ran a tool[REDACTED:location_address] uh[REDACTED:location_address] in the MCP server itself

  84. 10:16

    that is[REDACTED:location_address] uh[REDACTED:location_address] just going in[REDACTED:location_address] and on the[REDACTED:location_address] uh[REDACTED:location_address] context that's associated with this worker object[REDACTED:location_address] it's just changing the mode to band. And so now I've got that[REDACTED:location_address] and now I can say[REDACTED:location_address] um[REDACTED:location_address] "I want another shirt[REDACTED:location_address] please."

  85. 10:33

    And it's gonna try and run it. I'll just always allow that now. [laughs]

  86. 10:41

    And it was able to check that[REDACTED:location_address] and it said[REDACTED:location_address] "Absolutely not. Go away." [laughs]

  87. 10:46

    Wave.

  88. 10:48

    Um[REDACTED:location_address] and so[REDACTED:location_address] like[REDACTED:location_address] we can mix what it knows about me with what it has stored about me on the durable object[REDACTED:location_address] and that's in- unique for every user of it.

  89. 10:58

    And then[REDACTED:location_address] uh[REDACTED:location_address] I can do things like[REDACTED:location_address] uh[REDACTED:location_address] change it again. So if I say pretty please[REDACTED:location_address] it might have a pretty please tool[REDACTED:location_address] uh[REDACTED:location_address] available. [laughs]

  90. 11:24

    Sure is thinking. Yay. Since I asked nicely[REDACTED:location_address] it's gonna let me. [laughs] And I just ordered another shirt.

  91. 11:31

    Prompt engineering. [laughs] If you want to build your own MCP servers on Cloudflare[REDACTED:location_address] you can click to deploy your own with no authorization[REDACTED:location_address] so it's authless. So probably don't do that[REDACTED:location_address] but it is very qui- quick to do so.

  92. 11:48

    You click click to deploy. It generates a GitHub repo for you. You Git clone that[REDACTED:location_address] and then you edit your own tools[REDACTED:location_address] and they give you some tools to begin with[REDACTED:location_address] so it's[REDACTED:location_address] like[REDACTED:location_address] very fast.

  93. 12:00

    But again[REDACTED:location_address] that is authless. Do do auth. And it's still quick to deploy as well with Auth[REDACTED:location_address] just like slightly less fast.

  94. 12:09

    Yeah. And the[REDACTED:location_address] the beauty of this is that we're bringing the[REDACTED:location_address] like[REDACTED:location_address] you know[REDACTED:location_address] pretty simple tools. Like[REDACTED:location_address] this is just an OAuth flow being added to an MCP[REDACTED:location_address] and MCP is effectively just an API.

  95. 12:20

    Uh[REDACTED:location_address] so we're just[REDACTED:location_address] like[REDACTED:location_address] you know[REDACTED:location_address] getting it caught up with the tools that we already have[REDACTED:location_address] uh[REDACTED:location_address] for humans[REDACTED:location_address] but it's important to get this[REDACTED:location_address] uh[REDACTED:location_address] ready to go for these tools to act on our behalf as well.

  96. 12:31

    And where we can see this going in the future is[REDACTED:location_address] like[REDACTED:location_address] much more fine-grained authorization[REDACTED:location_address] where it's maybe[REDACTED:location_address] like[REDACTED:location_address] authorizing[REDACTED:location_address] you know[REDACTED:location_address] per line changes or[REDACTED:location_address] or per tool changes or even[REDACTED:location_address] like[REDACTED:location_address] maybe[REDACTED:location_address] like[REDACTED:location_address] authorizing[REDACTED:location_address] like[REDACTED:location_address] the networks[REDACTED:location_address] uh[REDACTED:location_address] the connections between things[REDACTED:location_address] and just doing...

  97. 12:46

    A- as we see it growing to doing thousands of i- of tasks on our behalf[REDACTED:location_address] this Auth piece is gonna be very important[REDACTED:location_address] uh[REDACTED:location_address] and especially the audit trail as well[REDACTED:location_address] and we can get that with[REDACTED:location_address] with Auth tools too[REDACTED:location_address] just to make sure that[REDACTED:location_address] like[REDACTED:location_address] we can see why this interacted this way[REDACTED:location_address] on whose behalf was

  98. 13:04

    it on[REDACTED:location_address] and what was the end result? Where did it fail? Uh[REDACTED:location_address] where did it go wrong? Things like that.

  99. 13:09

    Think of your users not as users but as deputies. They have access to tools[REDACTED:location_address] and they can use and also misuse them as well. Sometimes I think I trust people.

  100. 13:19

    Like[REDACTED:location_address] I do a live demo[REDACTED:location_address] and I'm like[REDACTED:location_address] "Let's see user[REDACTED:location_address] um[REDACTED:location_address] input." [laughs] People sometimes do not nice inputs. Yeah.

  101. 13:28

    Yeah. So get out there and deputize your own tools. Um[REDACTED:location_address] we'll- we have this repo available. There is the code[REDACTED:location_address] uh[REDACTED:location_address] a QR code for this repo. Also[REDACTED:location_address] the top QR code is to get-

  102. 13:40

    Get your own shirt.

  103. 13:41

    A shirt.

  104. 13:41

    Sorry.

  105. 13:41

    Yeah. Uh[REDACTED:location_address] so or you can just go to mcp.shop[REDACTED:location_address] uh[REDACTED:location_address] which you will run the same workflow that I just ran. Uh[REDACTED:location_address] it doesn't have the Pretty Please tool in it[REDACTED:location_address] though[REDACTED:location_address] uh[REDACTED:location_address] unfortunately.

  106. 13:50

    It'll just[REDACTED:location_address] it'll just do it even if you're mean to it. Uh[REDACTED:location_address] but you can order a shirt for the low[REDACTED:location_address] low price of zero dollars. So go check it out and get an MCPT shirt.

  107. 14:00

    And if you wanna add your own Pretty Please tool[REDACTED:location_address] check out the code in the second QR code[REDACTED:location_address] and we can't wait to see what MCP servers you build with Auth.

  108. 14:08

    Thank you.

  109. 14:09

    Thank you. [audience applauds] [outro music]